簡體   English   中英

用兩個DFS運行在O(V + E)中找到MST?

[英]Finding MST in O(V+E) with two DFS runs?

給定具有成本x或y邊(其中x小於y且均為正整數)的無方向連通圖,請找出O(V + E)中的MST

這個想法涉及使用兩個DFS運行並將重量更輕的節點折疊成超級節點(在第一次DFS運行之后),但是我不確定。 任何幫助表示贊賞。 我看到這樣的解決方案在幾個答案中都有提示,但是在任何地方都找不到它的解釋。

我認為您的直覺是正確的,可以找到運行時間為O(V + E)的無向連接圖的MST。 有一種稱為Kruskal的算法,可以計算O(V +Eα(V))中無向圖的MST,α(V)是Ackermann函數的逆函數,增長速度非常慢。 Kruskal算法達到O(V +Eα(V))的方式是使用聯合查找數據結構。 聯合查找是一種數據結構,用於跟蹤已划分為不相交的子集的元素。 在此數據結構中搜索元素(find(x))時,將壓縮樹,以便將根和X之間的每個節點的指針從其父級切換到樹的根。 union(x,y)函數使用find來確定節點是否屬於同一子集,如果它們是單獨的樹,則在壓縮過程中壓縮樹,然后將它們合並。 具有較低等級(樹的高度)的樹被移動以指向較大等級樹的根。 Kruskal使用聯合查找數據結構檢查頂點是否已連接。 通常,Kruskal的工作是將所有頂點添加到聯合查找的數據結構中,然后假設它們以遞增順序進行排序,則連續添加最低邊。 添加最低邊時,請檢查頂點是否已連接;如果未連接,請添加該邊並在兩個頂點之間執行並集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM