贪心法--最小生成树

一.Kruskal算法

  1. 思路:
    每次在图中选择一条最短的且不构成环的边,重复V-1次得到最小生成树
    注:不在一个集合表示不连通,保证了不会形成环

  2. 伪代码实现:
    贪心法--最小生成树_第1张图片

  3. 时间复杂度分析
    边排序:O(ElogE)
    建立集合:O(V)
    查找集合与合并集合O:O((V+E)logV)
    时间复杂度:O(ElogE)

  4. 正确性证明 :
    优化子结构:设uv是G中权值最小的边,则必有一棵最 小生成树包含边uv.(反证法)
    贪心选择性:按照点的个数进行归纳证明

二.Prim算法

1.思路:设置空图G’,先将任意顶点加入G‘,每次将G与G’间最短的一条边和对应的顶点加入到G‘中,直到G中没有顶点

2.伪代码
贪心法--最小生成树_第2张图片
3.时间复杂度分析:O(VlogV+ElogV)=O(ElogV)–使用最小堆实现
4. 正确性证明:

优化子结构: 设uv是G中与顶点u关联的权值最小的边, 则必有一棵最小生成树包含边uv.(反证法)

贪心选择性:归纳证明即可

你可能感兴趣的:(算法设计与分析,算法,数据结构)