回覆列表
  • 1 # 使用者2953413550839

    、Prim演算法:

    Prim演算法將所有頂點分成兩個部分A和B,A為目標集合,該演算法可以看成是不斷將B中頂點向A集合轉移的過程,在該過程中,不斷更新B中各頂點到A樹的最短距離,並將其排序,按照貪心思想將具有最短路徑並且不會產生迴路的那個頂點從B中移向A中。

    Prim演算法實現的是找出一個有權重連通圖中的最小生成樹,即:具有最小權重且連線到所有結點的樹。(強調的是樹,樹是沒有迴路的)。

    Prim演算法是這樣來做的:

    首先以一個結點作為最小生成樹的初始結點,然後以迭代的方式找出與最小生成樹中各結點權重最小邊,並加入到最小生成樹中。加入之後如果產生迴路則跳過這條邊,選擇下一個結點。當所有結點都加入到最小生成樹中之後,就找出了連通圖中的最小生成樹了。

    二、Kruskal演算法:

    Kruska演算法將多有頂點分成N個部分,該演算法可以看成是不斷將N個部分進行合併的過程,在該過程中,先將多有的邊按照權重進行排序,再按照貪心思想依次將具有最短權重且不會產生迴路的頂點進行合併。

    Kruskal演算法與Prim演算法的不同之處在於,Kruskal在找最小生成樹結點之前,需要對所有權重邊做從小到大排序。將排序好的權重邊依次加入到最小生成樹中,如果加入時產生迴路就跳過這條邊,加入下一條邊。當所有結點都加入到最小生成樹中之後,就找出了最小生成樹。

    無疑,Kruskal演算法在效率上要比Prim演算法快,因為Kruskal只需要對權重邊做一次排序,而Prim演算法則需要做多次排序。儘管Prim演算法每次做的演算法涉及的權重邊不一定會涵蓋連通圖中的所有邊,但是隨著所使用的排序演算法的效率的提高,Kruskal演算法和Prim演算法之前的差異將會清晰的顯性出來。

  • 中秋節和大豐收的關聯?
  • 中超27輪,卡蘭加建功助建業2-0國安迎主場三連勝,國安徹底退出爭冠,如何評價?