Dijkstra算法分析

转载自:飘羽逸狂_新浪博客《Dijkstra算法分析》



Dijkstra算法分析:

一个顶点被标记就表明已经找到从源点到它的最短距离,标记的先后顺序表明了顶点到原点的远近.越先被标记表明离源点越近.假设已经有M个顶点被标记,它们是离源点最近的M个点,那么离源点最近的第M+1个顶点到源点的最短路径一定是只经过被标记的顶点,不会经过未被标记的顶点。


证明如下:

假设源点到第M+1个顶点的路径上有若干个顶点,那么当寻找到达第M+1个顶点的路径时,在最短路径上的顶点一定已经被标记了,因为它们离源点更近,所以当寻找到达第M+1个顶点的最短路径时只能从被标记的顶点中间找。记未标记顶点到源点的距离为的的d,d值最小的点为v,v一定就是离源点最近的第M+1个点。


Dijkstra算法之所以高效就是因为在搜索一个顶点到达源点的最短路径时,

第一,利用已经被标记的顶点的计算结果,避免重复计算,这是动态规划的思路;

第二,只在被标记的顶点集合中寻找,这是剪枝的搜索策略。


所以说通过使用标记的方法,避免了重复计算(记忆化搜索,动态规划的思路),减少了搜索范围,造就了dijkstra算法的高效。一般地,我们使用dijkstra算法计算源点到其他所有顶点之间的最短距离,但其实dijkstra算法也可以用来计算顶点对之间的最短距离,为什么呢考虑一条最短路径上的所有点A,B,C,D.点A到点B的最短距离一定等于d(B) - d(A),否则点A肯定可以通过一条更短的路径到达B,与已知矛盾,所有点A 和点B之间的最短距离一定是d(B) - d(A),利用这个可以来计算两点之间的最短距离。当我们找到了所有顶点到源点的最短距离之后,我们可以将所有顶点到源点的路径画出来,可以发现所有的路径将会构成一棵树,我们称这棵树为最短路树。所有在同一条从源点出发的线上的顶点之间的最短距离都是可以计算的。但是这种方法只可以计算部分顶点之间的最短距离,不能够求出所有顶点之间的最短距离。


Dijkstra方法不能够求出自身到自身的最大距离,因为每一次都会先把自身到自身的距离置为0。通过重复使用dijkstra方法可以求出所有顶点对之间的距离,但是不包括所有顶点自身到自身的距离。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值