数据结构——单源最短路径Dijkstra算法

单源最短路径Dijkstra算法       在现实世界中,经常有从一个城市到另一个城市选择最短路径的场景,这种场景也可以是网络数据传输过程中从一个网络节点到另一个网络节点进行路由。可以把这种场景建模成一个有向网,而耗费就是边上的权值,那么这类场景的问题就是在网中一点到另一点的最短路径问题了。       如果已经知道从节点s到节点e的最短路径是(vs,...,vk,ve)那么vs到vk的
摘要由CSDN通过智能技术生成

                          单源最短路径Dijkstra算法

       在现实世界中,经常有从一个城市到另一个城市选择最短路径的场景,这种场景也可以是网络数据传输过程中从一个网络节点到另一个网络节点进行路由。可以把这种场景建模成一个有向网,而耗费就是边上的权值,那么这类场景的问题就是在网中一点到另一点的最短路径问题了。
       如果已经知道从节点s到节点e的最短路径是(vs,...,vk,ve)那么vs到vk的最短路径一定就是(vs...vk)。用反证法,如果vs到vk的最短路径不是(vs...vk),设(vs...vk)为path1,而是另一条path2,很明显len(path1)>len(path2),那么从s到e的最短路径就是path2+len(k,e)了,因为path2+len(k,e)<path1+len(k,e),那path1+len(k,e)就是第一个条件(s,...,k,e)的最短路径,但却有另一条路径path2+len(k,e)比它更短,这和条件矛盾,因此不可能存在一个path2,使path2<path1,请得如果(s,...,k,e)是s到e的最短路径,那么(s,...,k)就是s到k的最短路径。
      这个结论表示最短路径具有最优子结构的性质,设dist(i)表示起始节点到节点i的最短距离,则可以得到dist(e) = min{dist(k)+weight(k,e)},这里的k是图中的某个节点,并且这个节点以e为邻接节点。根据这个式子,可以得到寻找最短路径的策略如下:
      初始如果i!=s,则设置dist(i) 等于远大于weight的数
   
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值