克魯斯卡爾算法例題圖解 普里姆與克魯斯卡爾算法有什么區(qū)別?
普里姆與克魯斯卡爾算法有什么區(qū)別?不總是一樣的。Kruskal算法是一種精確的算法,即每次都能得到最優(yōu)解,但對于大規(guī)模最小生成樹問題,求解速度較慢。Prim算法是一種近似求解算法,雖然它能得到大多數(shù)最
普里姆與克魯斯卡爾算法有什么區(qū)別?
不總是一樣的。Kruskal算法是一種精確的算法,即每次都能得到最優(yōu)解,但對于大規(guī)模最小生成樹問題,求解速度較慢。Prim算法是一種近似求解算法,雖然它能得到大多數(shù)最小生成樹問題的最優(yōu)解,但其中相當一部分是近似最優(yōu)解。這是我個人的看法。
普里姆算法和克魯斯卡爾算法區(qū)別?
Kruskal算法:
是在剩余的未選定邊中找到最小邊。如果它與選定的邊形成一個循環(huán),它將放棄并選擇第二小的邊。。
Prim算法:
相同的方法是在未選擇的邊中找到最小的邊,但還有一個選擇原則,即邊必須與所選邊連接。例如,如果邊(1,2)已選定,則下一條選定邊必須與頂點1或頂點2連接。。就這樣。。
已知一個無向圖如下,分別用普里姆和克魯斯卡爾算法生成最小生成樹(假設(shè)以1為起點,試畫出構(gòu)造過程)?
prim算法的基本思想是假設(shè)n=(V,e)是一個具有n個頂點的連通網(wǎng)絡(luò),t=(U,TE)是最小生成樹,其中U是t的頂點集,TE是t的邊集。(1)初始U={U0}(U0∈V),TE=φ;(2)從U∈U的所有邊中選擇最小代價邊(U0,V0),V∈V-U并合為te,V0并合為U;(3)重復(fù)(2)直到U=V,此時te必須包含n-1條邊,則t=(V,{te})是n的最小生成樹,Kruskal算法的基本思想是假設(shè)n=(V,e)是一個具有n個頂點的連通網(wǎng)絡(luò),(1)n個頂點被視為n個集合;(2) 根據(jù)從小到大的權(quán)重順序選擇邊。所選邊應(yīng)滿足兩個頂點不在同一組頂點中,且該邊位于生成樹的邊集中。同時,合并邊的兩個頂點集;(3)重復(fù)(2),直到所有頂點都在同一個頂點集中。注:1。最小生成樹不是唯一的。2圖形從最小的節(jié)點開始。
圖所示是一個無向帶權(quán)圖,請分別按Prim算法和Kruskal算法求最小生成樹?
prim算法有兩個主要特點:時間復(fù)雜度為O(N2)。它適用于尋找邊密集的最小生成樹。
2. Kruskal算法特點:時間復(fù)雜度為O(eloge)(E是網(wǎng)絡(luò)中的邊數(shù)),適合于尋找稀疏網(wǎng)絡(luò)的最小生成樹。