給定具有權重w(e)的帶權無向圖G(v,e),找出邊的集合,使得每對頂點(u,v)∈ G被連接(簡而言之,spanning tree
)並且所選邊緣的權重範圍是最小的(或者最小權重和最大權重之間的差異是最小的)。在給定圖中尋找具有最小範圍的生成樹的算法
我嘗試了貪心方法,其中對權重進行了排序,然後選擇了排序中連續邊(g [index = current_left],g [index + 1 = current_right])之間權重差最小的兩條邊數組,然後根據(current_left,current_left_j
)或(current_right,current_right + j
)(其中j
遞增)之間的最小差異向左或向右移動,直到找到具有至少一個未訪問頂點的邊緣。
例如:
在這裏,我們可以得到最小的範圍是通過選擇具有重{2,3,5}和範圍的邊緣是3
請指出建議的算法失敗的測試案例,並提出一種用於找到這樣的生成樹的算法。
編輯:
預期的時間複雜度爲O(| E |登錄| E |),其中| E |是邊數。
如何選擇第一條邊?顯然,在你的例子中,如果你從重量7的邊緣開始,你不能找到最佳解決方案。 – Henrik
排序我們得到的邊緣2,3,5,7 2和3之間的差異是1,這是通過選擇兩個邊緣可以達到的最小差異。所以首先我選擇2,3然後我選擇相應的。 – IronMan007
那麼,如果權重是1,2,100,102,104,108,您可以從1和2開始選擇?我敢肯定,你可以從中構建一個反例。 – Henrik