[英]Minimum Weighted Path Tree of an Undirected Graph
假設我們有一個無向圖G =(V,E)並且我們有兩個節點S和X.
我不知道最小生成樹是否可以解決它,但是通過對Dijkstra算法進行一些修改,它肯定可以解決。
將路徑的“長度”定義為該路徑的最大邊緣。 現在,使用Dijkstra算法找到從S到X的最短路徑。 這是您要尋找的路徑。 如果使用二進制堆,則復雜度為O((N+M)log N)
O(N * log N + M)
,而對於Fibonacci堆,復雜度為O((N+M)log N)
O(N * log N + M)
。
請注意,對於路徑長度的這個新定義,如果路徑的長度為l
,則在路徑的末尾添加邊緣不會減小其長度,因為該路徑中的最大邊緣只能增加。 該屬性對於Dijkstra的算法正常工作是必需的。
例如,如果您正在尋找邊緣最短的路徑,則Dijkstra的算法將失敗,就像圖形中存在負邊緣時失敗一樣。
您可以使用最小生成樹(Prim算法)來解決此問題。 您將從頂點S
開始,然后繼續使用Prim的算法構建樹,直到找到X
為止。 復雜度將為O((V + E)* logV)。
之所以會起作用,是因為在prim的算法中,您總是首先選擇權重最小的邊緣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.