图算法之最小生成树
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图算法之最小生成树相关的知识,希望对你有一定的参考价值。
连通的无向图G=(V,E)来表示,对于每条边都赋予权重w,希望能找到边的集合是的所有点都能够连接起来,而且这些边的权重能达到最小。
由于这些边是无环的而且能连通所有结点,所以最终构成了一棵树。图G的这棵树叫做生成树,求取该树的问题叫做最小生成树问题。
这里要学习的是Kruskal算法和Prim算法。
这两中算法都是属于贪心算法,其每一步都必须在多个可能的选择中选择一种。
这种策略并不能一定找到一颗权重最小的生成树。
贪心算法在每时每刻都生长最小生成树的一条边,并在整个策略的实施过程中,管理一个遵循下述循环不变式的集合A:
在每遍循环之前,A是某科最小生成树的一个子集。
在每一步之前,都会选择一条不属于集合A的边加入到集合A中,使得A和那条边的新集合仍然是某棵最小生成树的子集。
这种边加入到A中不会破坏掉A的循环不变式,因此也叫做安全边。
下面就是如何找到辨认安全边的规则和利用这种规则构建最小生成树算法。
安全边辨认规则
Kruskal算法
Prim算法
以上是关于图算法之最小生成树的主要内容,如果未能解决你的问题,请参考以下文章
C++ 图进阶系列之 kruskal 和 Prim 算法_图向最小生成树的华丽转身