Prim算法理解推理。

Prim算法是数据结构与算法中比较难理解的算法,但应该也是基础的算法,/(ㄒoㄒ)/~~,我说下我对于这个算法的理解,因为本身比较菜,可能我的理解对大家有点帮助作用,跟着算法思考就能理解这个算法怎么实现。

猫屁股镇blog:

 

首先得理解MST性质,不一定要理解清楚,抽象的概念,理解不了就记一下MST性质。

MST:已知一连通网集合N,及一个U属于N的最小生成树,一开始U只有一个顶点,从该点出发构建最小生成树,那么N-U的最小权值边必是最小生成树的一条边。

      

 Prim算法思想如下:假如有一连通网如此。假设从A点出发构建最小生成树G,遍历与A的边,那么权值最小的CA就会是G的一条边,则把C顶点及CA加入最小生成树,接着对比与G集合相邻的边,找到最小权值的边CF,把F及CF加入集合G中,接着重复此思路,把D顶点DF加入G等完成最小生成树构造,主要是思想。

Prim算法实现过程:原连通网如两顶点没有边则用#define MAX 65535定义为无穷即某两点之间没有边则用最大MAX来表示或者用-1这看自己怎么安排。

算法需要两个数组,一个为lowcost数组,一个为vertex数组,两个数组都是预选边的信息,lowcost表示边到最小生成树G的权值数组,vertex为对应边顶点的前驱,即是与谁相连。两个数组的下标对应无向图的下标。当一个顶点已经加入了最小生成树,那么它的lowcost为0.

一开始从A开始,先把A加入最小生成树,然后遍历A的所有邻接点加入lowcost数组中,假如与某个结点没有边,lowcost中则记为无穷,这时候lowcost中最小的权值结点即为连通网N到最小生成树U的顶点即为MST性质中的一条边。关键点来了,算法思想是找连通网N到最小生成树U的最小权值边,这时候只要遍历新加入的结点,就例如图中的C即可,把与C连通的结点最小的权值更新到lowcost数组中,即完成了这个思想,找到与最小生成树U最近的边,为什么呢,这是因为其实你前面已经遍历过A结点,lowcost里记录了到最小生成树中的最小权值边,就相当于一直记录着,然后遍历C的时候如果有小于lowcost的权值,那么更新一下即可找到。这是思想到算法逻辑的实现。

可以跟着思想,在草稿纸上过一遍便能理解算法的过程怎么实现.

示例

lowcost示意图

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值