双向迪杰斯特拉

来源:互联网 发布:淘宝卖家层级金额 编辑:程序博客网 时间:2024/05/01 18:24

1. 问题定义

已知:图G=(V, E),其中V表示顶点集,E表示边集。st为图G中任意的两个顶点。

求:顶点st之间的最短路径。最短路径是指从st的所有路径中长度最小的那条路径。

2. 问题求解

2.1迪杰斯特拉

迪杰斯特拉按照离原点s的距离从近到远以此扩展的方式寻找最短路径。

2.2双向迪杰斯特拉

显然若st之间的最短路径长度为d,则迪杰斯特拉方法需要搜索一个半径为d的球。而双向迪杰斯特拉搜索以st为圆心的两个半径为d/2的球,当然d/2是理想状态,一般情况半径都会大于d/2

下面以图2-1(论文1)为例说明双向迪杰斯特拉的过程。注意图中结点12与结点3构成的“三角形”并不满足三角不等式,原因是他们只是表示一种关系,比如说亲密程度;当然即使是路网也是可能的,因为现实生活中两点之间的道路不一定是直线,即图中结点1到结点3之间边的权重6不是两点之间的欧拉距离(直线距离)。

2-1 查询图G=(V, E),查询结点1与结点9之间的最短路径

第一步:因为到结点1与结点9已知的均为0(相等),因此我们扩展两个分别以结点1和结点9为半径的圆,如图2-2所示。其中左边的(1, 0)表示从节点1(源点s)出发到结点1的距离为0,同理(3, 6)表示结点1出发到结点3之间的距离为6。显然有结点1与结点3之间的最短距离不是6,而是4。相似有(8, 2)表示结点8到结点9的距离为2

2-2

第二步:第一步求出的路条路径中结点8到结点9和结点6到结点9有最小距离2。因此,我们扩展这两个顶点,扩展结果如图2-3所示。

2-3

这时我们找到了路径两条路径,即1-3-6-91-4-6-9,且这两条路径的距离分别为1012。但我们注意到从结点1出发最小值为3,从结点9出发最小值也为3,无法判断是否存在一条长度为6的最短路径,因此需要继续扩展。

第三步:现有路径中距离最小的为1-29-5,我们首先扩展1-2这条路径。扩展结果如图2-4所示。图中共有三条路径,分别为:1-2-5-8-91-2-3-6-91-4-6-9,且他们的长度分别为:10812。此时求出的路径中最短距离为8,但距离结点1与结点9的最小距离分别为43。他们之和7仍小于8,因此需要继续扩展。

2-4

第四步:现有路径中距离最小的为3,因此选择5号结点进行扩展。扩展结果如图2-5所示。图2-5中共有三条路径,分别为:1-2-5-8-91-2-3-6-91-4-6-9,且他们的长度分别为:10812。所有路径中最小距离8。距离结点1与结点9的最小距离均为4,且之和等于8,因此最短路径求出。最短路径为1-2-3-6-9,距离为8

2-5

3.总结

双向迪杰斯特拉最求单源点最短路径,即求一点顶点到多个顶点之间的最短距离时不如利用动态规划求解。

 

 

参考:

1 T.A.j.Nicholson. Finding the shortest route between two points in a network. The Computer Journal,9:275-280

2 Yufei Tao, Cheng Sheng and Jian Pei. On k-skip Shortest Paths. Sigmod’11, June 12-16, 2011

0 0