算法 - 最小生成树(Kruskal算法)

Kruskal算法
Input 图G(V,E) ,权值函数W
Output 最小生成树所包含的边

  1. 初始化返回边集A为空
  2. 将输入的边权值按照递增顺序排序
  3. 将每个顶点建立起一个集合
  4. for (u,v)属于E
  5. if u,v不在同一个集合中 //说明该边不在同一个连通图中
  6.  将边(u,v)添加到返回集合A中
    
  7.  合并set(u),set(v)   //合并集合u,v
    
  8. return A

时间复杂度:O(nlogn)
排序需要O(nlogn),其余各步骤时间复杂度均为O(n)

贪心选择性:最小生成树必然包含图G中权值最小的边(u,v)
设T为图G的一棵最小生成树,若其不包含边(u,v),则将该边添加到T中导致成环,选择环中的另一条边(x,y),将其删除得到另一棵生成树T1,易得w(T1) = w(T) - w(x,y) + w(u,v) < w(T).所以与T为最小生成树矛盾,因此最小生成树必然包含图G中权值最小的边(u,v)

优化子结构:原问题的优化解由子问题的优化解构成
假设T/(u,v) 不是G/(u,v)的最小生成树,则一定存在一个T1是G/(u,v)的最小生成树,因此T2 = T1 + (u,v) 为G的最小生成树,w(T2) = w(T1) + w(u,v) < w(T/(u,v)) + w(u,v) = w(T) 由此,T2为G的最小生成树,与题设矛盾

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值