我正在學習Kruskal的算法,並且遇到了幾個不同的實現,並想知道它們之間可能存在什麼折衷。這兩種實現如下:在執行排序和使用優先隊列之間的Kruskal算法之間的權衡是什麼?
實現一個 - 把圖中的所有邊緣成一個優先級隊列PQ - 從PQ 除去最小邊e - 如果E連接2先前未連接的圖組分(使用一臺Union查找測試數據結構),然後將其添加到MST - 重複,直到在MST邊數等於圖中頂點總數 - 1
實現兩 - 在圖中的所有邊進行合併排序或快速排序 - 從排序的邊緣數組中刪除最小邊緣 然後按照上述算法
所以唯一真正的區別是在O(eloge)時間內是使用優先級隊列還是先行排序。
這裏的權衡是什麼?兩種實現似乎都有相同的運行時間 - O(ElogV)。我說logV而不是logE,因爲連接的無向圖中邊的最大數量是O(V^2)和logV^2 = 2logV,因此去除常數因子可以減少到O(logV)。