Prim算法伪+代码讲解

1.快速了解Prim算法

学过数据结构的看官老爷们都应该知道,普里姆太熟悉了,不就是最小生成树的算法嘛,是的它是一种求最小树的算法。本文通过剖析伪代码的过程来理解这个“easy algorithm”。

话不多说下面先描述下算法:

运算方法是任取一个点,以这个点为集合开始,然后对所有点与这个点的距离进行更新,找出离这个集合最近的点,然后把这个点放进这个集合(所以每一次运算的时候都要判断一下这个点是否在这个集合里,所有要用到一个vset数组)更新权值,然后再以这个集合继续寻找离这个集合最近的点,直到没有点存在。

2.伪代码讲解Prim算法

image-20200928000713374第一个for 循环初始化最小权值结集合\pi(v)(表示最小生成树到结点v的权值),V为 所有顶点的集合 .

随机选取一个顶点作为起始顶点并加入集合U(最小生成树的结点).

对所有结点进行while循环,N(U)表示结点集合

第二for循环从剩余结点选取到当前最小生成树的最小路径权值的点。l(uv) 记录结点u->v的路径权值集合如果小于\pi(v)则将更新\pi(v)的值为l(uv),p(v)记录可能选取的结点,

选取新的结点后更新集合U,以及F(存储最小生成树边的集合),

也许不大好理解下面我们来看个例子吧

image-20200928001139390
image-20200928001139390

下表是最小生成树的简化过程,只列举了生成树的有效步骤没有将所有可能情况列出

u v U V π(v) P(v) F
a d {a,d,b} {a,b,c,d,e,f,g,h} 5 d {a->d}
d b {a,d} {a,b,c,d,e,f,g,h} 8 b {a->d,d->b}
a c {a,d,b,c} {a,b,c,d,e,f,g,h} 9 c {a->d,d->b,a->c}
b f {a,d,b,c,f} {a,b,c,d,e,f,g,h} 9 f {a->d,d->b,a->c,b->f}
f e {a,d,b,c,f,e} {a,b,c,d,e,f,g,h} 6 e {a->d,d->b,a->c,b->f,f->e}
e
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值