图的优先级搜索PFS与prim算法构造MST

MST:最小支撑树,有n个节点和n-1条边(边数是保持连通图的最小值,即仅仅够形成树即可)。用途例如“铺设最小代价的网络”。

PFS算法按照优先级生成支撑树:

算法:1、更新所有顶点的优先级

           2、从中选出优先级最大的节点(数据结构为优先级队列priority queue)

           3、viseted之并和边一起加入支撑树

           4、重复1-3步,直至所有点为visited状态

缘起:若用枚举的方法,根据cayley公式,在完全图中有n^(n-2)棵支撑树,所以我们需要高效地求得最小支撑树。

原理:任何一个割的最短桥(也称跨边crossedge)必然属于某一个MST。(prim算法从数学角度看并非是严谨的,因为这些最短桥未必属于同一棵MST,而且MST的结果也不唯一,但prim将这些最短桥拼凑在一起是一种正确解,该算法可行。)每一条最短桥,都是当下两个集合(割)之间的最短距离。 

prim算法:(贪心策略):从任意点v开始,将最短边选为tree边,相应节点纳入到最小支撑树中。

Kruskal算法:初始时节点集合包含有n个节点,边集为空。取权值最小的边加入“边集”,只要该边的两个节点尚未有通路即可,若有则放弃该边进行下一条边的尝试。直到边数==n-1时算法停止,即得到MST。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值