最小生成树问题(Minimum Spanning Trees, MST)
作者:Bluemapleman(tomqianmaple@outlook.com)
麻烦不吝star和fork本博文对应的github上的技术博客项目吧!谢谢大家的支持!
知识无价,写作辛苦,欢迎转载,但请注明出处,谢谢!
问题定义
给定一个无向图G=(V, E),以及边(Edge)上的权值w: E -> R。
在G中找到一棵生成树 T ⊆ E T\subseteq E T⊆E,这棵树连接了所有的顶点,且其所有边的权值的总和是所有这样的生成树中最小的。
生成MST的方法
生成MST的两个经典算法Kruskal和Prim算法都是基于贪心的思想,只是它们应用贪心的方式不太一样。但是它们都遵循一个一般性方法(Generic Method),这个一般性方法每次为MST找一个边。这个一般性方法会维持一个边的集合A,并保持以下迭代不变性质(loop invariant):
每次迭代之后, A是某个MST的边子集。
每一次迭代过程中,我们确定一个可以加到A中,且不违反迭代不变性质的边(u,v);也就是说,