菜单
×
   ❮   
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 提供支持