最短路径查找-prim算法和kruskal算法

如坐车网中的最优坐车路线一样,本质就是探寻最短径距.即最小生成树生成问题.

当然坐车网中得出結果后还要进行车辆换乘问题,但这更易了.

 

prim算法

一个V set来存放结点,E set存放边.每次从树中选取V的最近邻,形成的一条边,但条件是与E中的不能有loop.

如此循环,直到 | E | = n - 1,n为顶点数.(如果直接使用数学表达式来表达是非常严谨的,也不容易知道.还是通过例子才容易理解)

 

 特点:

  a.結果不唯一,因为当遇到相同权值时情况;

  b.由于a的出现,使得結果可能陷入局部最小值,即非所谓的'最小'生成树.但事实上这算法是有可能的.

  c.适合于顶点数多的情况

 

kruskal算法

E set中保存选择后的边,S为所有的边集合.

 首先,在S中选择最小权植的边,然后E=E U e(i),S=S-e(i),但前是e(i)与E不构成回路(因为結果是树,树是没有回路的)

 然后,如此循环,直到  | E | = n - 1为止.这点与prim是一样的.

特点:

 a.适合于边较少的R.因为其实每次选择最小权边时需要排序来实现.如果边太多的话会影响效率.

 b.結果不唯一.这也是可能存在相同的加权边引起的.

 c.即使b出现了,最終的图可能不一致.但最小生成树的权和是唯一的.即此算法是稳定的.

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值