選單
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

DSA 最小生成樹


最小生成樹問題

最小生成樹(MST)是指連線無向圖中所有頂點的邊的集合,且這些邊的總權重最小。


{{ msgDone }}

上面的動畫運行了 Prim 演算法 來尋找最小生成樹。另一種尋找最小生成樹的方法,也適用於不連通圖,是執行 Kruskal 演算法

它被稱為最小生成,因為它是一個連通的、無環的、無向圖,這正是樹形資料結構的定義。

在現實世界中,找到最小生成樹可以幫助我們找到連線房屋到網際網路或電網的最有效方式,或者幫助我們找到遞送包裹的最快路線。


最小生成樹思想實驗

讓我們想象一下,上面動畫中的圓圈是還沒有接入電力的村莊,而你想將它們連線到電網。在一個村莊接入電力後,電纜必須從該村莊延伸到其他村莊。村莊可以透過許多不同的方式連線,每條路線都有不同的成本。

電纜是昂貴的,挖掘電纜溝或在空中鋪設電纜也是昂貴的。地形無疑會帶來挑戰,然後可能還會有因電纜最終位置不同而產生的未來維護成本。

所有這些路線成本都可以作為圖中的邊權重進行核算。每個頂點代表一個村莊,每條邊代表連線兩個村莊的電纜的可能路線。

建立了這樣的圖之後,就可以找到最小生成樹(MST),這將是連線這些村莊到電網的最有效方式。

這實際上就是第一個 MST 演算法(Borůvka 演算法)在 1926 年的用途:尋找連線摩拉維亞(捷克共和國歷史區域)到電網的最佳方式。


MST 演算法

本教程接下來的兩頁將解釋兩種尋找圖中最小生成樹的演算法:Prim 演算法Kruskal 演算法

Prim 演算法 Kruskal 演算法
它能找到不連通圖的 MST(最小生成森林)嗎?
它是如何開始的? MST 從一個隨機選擇的頂點開始增長。 MST 中的第一條邊是具有最低邊權重的邊。
它的時間複雜度是多少? \(O(V^2)\) 或 \( O( E \cdot \log{V}) \) (最佳化) \( O( E \cdot \log{E} ) \)


×

聯絡銷售

如果您想將 W3Schools 服務用於教育機構、團隊或企業,請傳送電子郵件給我們
sales@w3schools.com

報告錯誤

如果您想報告錯誤,或想提出建議,請傳送電子郵件給我們
help@w3schools.com

W3Schools 經過最佳化,旨在方便學習和培訓。示例可能經過簡化,以提高閱讀和學習體驗。教程、參考資料和示例會不斷審查,以避免錯誤,但我們無法保證所有內容的完全正確性。使用 W3Schools 即表示您已閱讀並接受我們的使用條款Cookie 和隱私政策

版權所有 1999-2024 Refsnes Data。保留所有權利。W3Schools 由 W3.CSS 提供支援