双向迪杰斯特拉
来源:互联网 发布:淘宝卖家层级金额 编辑:程序博客网 时间:2024/05/01 18:24
1. 问题定义
已知:图G=(V, E),其中V表示顶点集,E表示边集。s,t为图G中任意的两个顶点。
求:顶点s与t之间的最短路径。最短路径是指从s到t的所有路径中长度最小的那条路径。
2. 问题求解
2.1迪杰斯特拉
迪杰斯特拉按照离原点s的距离从近到远以此扩展的方式寻找最短路径。
2.2双向迪杰斯特拉
显然若s与t之间的最短路径长度为d,则迪杰斯特拉方法需要搜索一个半径为d的球。而双向迪杰斯特拉搜索以s与t为圆心的两个半径为d/2的球,当然d/2是理想状态,一般情况半径都会大于d/2。
下面以图2-1(论文1)为例说明双向迪杰斯特拉的过程。注意图中结点1、2与结点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-9、1-4-6-9,且这两条路径的距离分别为10与12。但我们注意到从结点1出发最小值为3,从结点9出发最小值也为3,无法判断是否存在一条长度为6的最短路径,因此需要继续扩展。
第三步:现有路径中距离最小的为1-2和9-5,我们首先扩展1-2这条路径。扩展结果如图2-4所示。图中共有三条路径,分别为:1-2-5-8-9、1-2-3-6-9和1-4-6-9,且他们的长度分别为:10、8、12。此时求出的路径中最短距离为8,但距离结点1与结点9的最小距离分别为4和3。他们之和7仍小于8,因此需要继续扩展。
图2-4
第四步:现有路径中距离最小的为3,因此选择5号结点进行扩展。扩展结果如图2-5所示。图2-5中共有三条路径,分别为:1-2-5-8-9、1-2-3-6-9和1-4-6-9,且他们的长度分别为:10、8、12。所有路径中最小距离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
- 双向迪杰斯特拉
- 最短路径之迪杰斯特拉与双向迪杰斯特拉实验结果
- 双向排序
- 双向链表实列
- 双向容器
- 双向冒泡
- 双向可控硅
- 双向排序
- 双向排序
- 双向BFS
- 双向加密
- 双向加密算法
- 双向队列
- many2many 双向
- 双向端口
- 双向BFS
- 双向BFS
- 双向队列
- 运维管理的提升-2013
- 二分+并查集 hdu 1598 find the most comfortable road
- 1.2. What Can CloudStack Do?
- Request.RawUrl获取当前请求重写(UrlRewrite)Url的方法介绍
- 图像分割之(四)OpenCV的GrabCut函数使用和源码解读
- 双向迪杰斯特拉
- java.math.BigDecimal类的用法
- 如何进行数据库,比如ORACLE,SQL SERVER的逆向工程,将数据库导入到PowerDesigner中
- linux
- java自动根据文件内容的编码来读取避免乱码
- 每日新闻
- C# 委托之 事件 三枪控件2 2014-03-10 09:48 阅读(0) 评论(0) 编辑 删除
- 女子遭丈夫殴打辱骂后摔死两个月大儿子
- ImageView & ScaleType