首页 > 编程语言 > 详细

迪杰斯特拉算法

时间:2016-07-20 02:05:05      阅读:278      评论:0      收藏:0      [点我收藏+]

迪杰斯特拉算法简介

迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。

?

?

迪杰斯特拉算法原理


bubuko.com,布布扣
?

1.首先,引入一个辅助向量D,它的每个分量 D ?表示当前所找到的

Dijkstra算法运行动画过程

Dijkstra算法运行动画过程

从起始点 ?(即源点 ?)到其它每个顶点 ?的长度。

例如,D[3] = 2表示从起始点到顶点3的路径相对最小长度为2。这里强调相对就是说在算法执行过程中D的值是在不断逼近最终结果但在过程中不一定就等于长度。[1]?

2.D的初始状态为:若从 ?到 ?有弧(即从 ?到 ?存在连接边),则D ?为弧上的权值(即为从 ?到 ?的边的权值);否则置D ?为∞。

显然,长度为 D ?= Min{ D | ?∈V } 的路径就是从 ?出发到顶点 ?的长度最短的一条路径,此路径为( ?)。

3.那么,下一条长度次短的是哪一条呢?也就是找到从源点 ?到下一个顶点的最短路径长度所对应的顶点,且这条最短路径长度仅次于从源点 ?到顶点 ?的最短路径长度。

假设该次短路径的终点是 ?,则可想而知,这条路径要么是( ?),或者是( ?)。它的长度或者是从 ?到 ?的弧上的权值,或者是D ?加上从 ?到 ?的弧上的权值。

4.一般情况下,假设S为已求得的从源点 ?出发的最短路径长度的顶点的集合,则可证明:下一条次最短路径(设其终点为 ?)要么是弧( ?),或者是从源点 ?出发的中间只经过S中的顶点而最后到达顶点 ?的路径。

因此,下一条长度次短的的最短路径长度必是D ?= Min{ D ?| ?∈V-S },其中D ?要么是弧( ?)上的权值,或者是D ?( ?∈S)和弧( ?, ?)上的权值之和。

算法描述如下:

1)令arcs表示弧上的权值。若弧不存在,则置arcs为∞(在本程序中为MAXCOST)。S为已找到的从 ?出发的的终点的集合,初始状态为空集。那么,从 ?出发到图上其余各顶点 ?可能达到的长度的初值为D=arcs[Locate Vex(G, ?)], ?∈V;

2)选择 ?,使得D ?=Min{ D | ?∈V-S } ;

3)修改从 ?出发的到集合V-S中任一顶点 ?的最短路径长度。

迪杰斯特拉算法

原文:http://gaojingsong.iteye.com/blog/2311331

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!