【图】最小生成树{更新中}

 

最小生成树

最小生成树的产生:希望在城市间建设基础设施,连通所有城市,不考虑容错性,如果花费最低成本实现?

最小生成子树:原图选出这样的边,让所有顶点连通,边权重和最低。(生成子图不需要后两个条件)

 

Kruskal算法

Kruskal算法的产生:从定义出发,选择边,让其涵盖所有顶点。边的选择使用贪心思想,限制是辐射生长的树。假设图包含 n个顶点。

  • 第 1 边,先选择最小权重的一条边,记录下已连通的 2 个顶点。
  • 第 2 边,然后选择下一条最小权重的边,该边不能连接已连通的顶点(否则形成环,多余的边被加入,如下图1.1所示)。记录下已连通的 3 个顶点
Kruskal算法选边限制
图 1.1 不加限制的贪心

 

  • 第 n-1 边,继续选择下一条最小权重的边,该边不能连接已连通的顶点,此时已连通全部 n 个顶点,结束。

动态效果图:

 

Prim算法

Prim算法的产生:类似路由选择下一跳的过程。下一跳选择使用贪心思想,类似Kruskal的辐射。

  • 先随机选中一个顶点,选择下一跳顶点,跳跃边权重最小。
  • 此时图已包含了两个顶点,观察两个顶点的所有下一跳顶点,继续选择该下一跳权重最小的顶点,且该顶点还没连通上。
  • 此时图已包含了三个顶点,观察三个顶点的所有下一跳顶点,继续选择该下一跳权重最小的顶点,且该顶点还没连通上。
  • 。。。
  • 此时图已包含了 n-1 个顶点,观察 n-1 个顶点的所有下一跳顶点,继续选择该下一跳权重最小的顶点,且该顶点还没连通上,也就是最后一个顶点。
  • 此时图已包含了 n 个顶点,结束。

数据结构:集合动态记录已连通的节点。邻接信息(表/矩阵)。

动态效果图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值