最小生成树

最小生成树的概念:树:无回路,V个顶点一定有V-1条边;生成树:包含全部顶点,V-1条边都在图里;向生成树中任加一条边都一定构成回路;最小:边的权重和最小

如果最小生成树存在,图一定是连通的。

贪心算法:(贪)每一步都要最好的,(好)权重最下的边。

约束:只能用图里有点边,只能正好用掉V-1条边,树中不能有回路

Prim算法——让一棵小树长大,时间复杂度是T = O(V²),在稠密图里是合算的。

找权重最小的某一条边,收入树中,搜索相连边的两个顶点的下一条最小的边,注意不能是回路。

代码见书229页

Kruskal算法——将森林合并成树,用作在稀疏图。时间复杂度是T = O(|E| log |E|)

把权重最小的边无论多少,收入树中,但是不能收入能构成回路的边。

可以把所有边的权重放入最小堆。可以用并查集来判断某一条边是否构成了回路。

代码见书234页(只有伪代码)

原文地址:https://www.cnblogs.com/zhengxin909/p/12805101.html