1. 程式人生 > >關於最小生成樹演算法 —— Kruskal 有效性的證明

關於最小生成樹演算法 —— Kruskal 有效性的證明

證明過程:

  • 首先,假設我們已經對所有邊進行了排序,並且當前遍歷到的邊是連線點1和點2的邊
  • 因為這條邊是最小的邊,而點1和點2在最小生成樹中一定會直接或間接的相連,因此任何從點1到點2的路徑都不小於這條邊。如圖,如果不走這條邊就只能走1→3→2(而如果這樣走顯然會使得1→2的距離過大,而我們當前只討論1→2的最優選項)。或者,我們可以假設一種情況:點1和點2之間有兩條權值為0.5的邊,間接的連線了點1和點2,那麼這條路徑顯然比當前權值為2的邊的權值小。但是我們是從小到大遍歷邊的,所以如果出現了這種情況,那麼由於比權值為2的這條邊小,那麼他們必定已經被遍歷。
  • 由於那條路徑已經被遍歷過,那麼這時候點1和點2就處於一個並查集了,也就是說我們不會再選擇邊權為2的這條邊了。
  • 因此我們可以證明出一個結論:圖中權值最小的這條邊必然要被選擇
  • 假設我們已經選擇了直接連線點1點2的這條邊,那麼我們就可以對點1和點2進行縮點,由於最小生成樹的性質(只要有路徑連線兩個任意結點即可),縮點對建圖沒有任何影響。
  • 重複以上操作,直到邊的數量等於點的數量減一(一個圖的最小生成樹的邊的數量必定等於這個圖的點的數量減一)即可得出最小生成樹。

注意:

  • Kruskal不支援有向圖

歡迎加入我們的OI討論群

群號:849352599