最短路径问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最短路径问题的研究
学生姓名:苏振国指导老师:王向东
摘要最短路径问题是研究线状分布的地理事物中最常用的方法。其中迪克斯查1959年提出的标号法在最短路径问题的研究中应用最为广泛,尤其在交通选址方面。根据迪克斯查标号法的基本思想及应用现状,本文以其在城市消防站选址问题上的应用为例,详细介绍了迪克斯查标号法的应用、原理及其步骤。展现了最短路径法的突出优点:不仅求出了起点和终点的最短路径及其长度,而且求出了起点到图中其他各点的最短路径及其长度。
关键词最短路径步骤原理应用分类
1引言
在实际中常提出这样的问题,比如说,在交通网中,问A,B两地是否有道路可通?如果有通路且不止一条的话,那么最短的是哪条?所谓最短,可理解为里程数最少,也可理解为旅差费最省,还可理解为道路的建造成本最低等等。总之,这类问题都可归结为在一个有向图中求最短路径的问题。本论文研究的主要目的就是为了详细介绍关于最短路径问题的标号法,及其在实际生活中如何应用。下面我将展开论述。
2最短路径的现状分析及其研究发展方向
2.1现状分析
最短路径问题一直是计算机科学、运筹学、地理信息科学等学科的一个研究热点。国内外大量专家学者对此问题进行了深入研究。经典的图论与不断发展完善的计算机数据结构及算法的有效结合使得新的最短路径算法不断涌现。它们在空间复杂度、时间复杂度、易实现性及应用范围等方面各具特色。针对串行计算机的最短路径算法,已经几乎到达理论上的时间复杂度极限。现在的研究热点,一是针对实际网络特征优化运行结构,在统一时间复杂度的基础上尽可能地提高算法的运行效率;二是对网络特征进行限制,如要求网络中的边具有整数权值等,以便采用基数堆等数据结构设计算法的运行结构;三是采用有损算法,如限制范围搜索、限定方向搜索及限制几何层次递归搜索;四是采用拓扑层次编码路径视图,对最短路径进行部分实例化编码存储;五是采用并行算法,为并行计算服务。
2.2研究发展方向
2.2.1最短路径算法的实时性
目前,静态的最短路径算法已经十分完善。但是,在实践中,网络特征可能时刻会发生变化,要求最短路径算法必须能够实时地自动更新。这类问题主要集中在交通网络的实时导航、通勤、调度和计算机互联网的数据传递路由等方面。在动态最短路径问题中,弧段权值、节点耗费等均为时间t的函数,既可以是连续的,也可以是离散的。在假定网络路径权值服从FIFO原则的一致性假设前提下,任何静态的LS和LC算法均可扩展为时间依赖的最短路径算法。
2.2.2最短路径算法的并行化
随着计算机处理数据量的逐渐增多,传统的串行计算机的负荷也逐渐加重。运行在服务
器端的最短路径算法必须向基于图分解的并行算法的方向发展,以满足大量的实时最短路径查询的需要。
关于最短路径并行算法的讨论有两种类型,一种基于较抽象的并行计算模型,不限制处理器的数目,研究给定问题的计算复杂度在并行计算的情况下能降到什么程度。如果已经达到下界,再设法减少处理器的数目,或放松对处理器间耦合程度的一些不尽合理或不尽现实的要求;另一类研究则针对实际的并行计算系统,其处理器数是有限的(至少不可能与问题规模相当),研究如何设计或实现某个或某类问题的并行求解。此类并行算法的设计往往还伴有在实际系统上的计算实例和性能分析。由于对处理器的数目进行了合理的限制,并行计算系统在实践中更有价值,是最短路径问题算法并行化研究的趋势所在。
3标号法的基本思想及最短路径问题的分类
3.1基本思想
迪克斯查算法是目前公认的最好的算法。其基本思想是从起点v0出发,逐步向外发展。探索过程中,每到一个点,都记录下路径与路程,称为这个点的标号。故迪克斯查算法也称为标号法。
3.2最短路径问题的分类
最短路径问题,通常归属为三类: (1)单源最短路径问题:包括确定起点的最短路径问题和确定终点的最短路径问题。确定终点与确定起点的最短路径问题相反,该问题是已知终点,求最短路径问题。在无向图中该问题与确定起点的问题完全等同,在有向图中该问题等同于把所有路径方向反转的确定起点的问题。(2)确定起点终点的最短路径问题:即已知起点和终点,求两结点之间的最短路径。(3)全局最短路径问题:求图中所有的最短路径。
4标号法的使用步骤及实践演练
4.1使用步骤
求解最短路径问题的常用方法是经典的迪克斯查算法。迪克斯查算法通常也称为标号法,假设每个网络节点都有一对标号(d j,p j),其中d j,是从起始点s到节点j的最短路径的长度,通常也称为点j的标号值;pj是从起始点s到节点j的最短路径中点的前一点,又称之为先前节点。求解从起始点s到终点t的最短路径的迪克斯查算法的基本过程如下所述。
第1步:初始化。起始点设置为d s=0,ps为空;所有其他点d j=∞,p j为空;标记起始点s,记k=s,其他所有点设为未标记的。
第2步:检验未标记点。检验从所有已标记的点k到其他直接连接的dj未标记的点j的距离,并设置d j=min[d j,dk+l kj],其中,l kj是从点k到点j的直接连接的边的长度。
第3步:选择新标记点。从所有未标记的结点中,选取d j中最小的一个记为d i,即d i=min [d j,所有未标记的点j]。点i就被选为最短路径中的一点,并设为已标记的点。
第4步:确定先前点。从已标记点中找到直接连接到点i的点j*,作为其先前点,设置p i=j*。
第5步:检查标记点i。检查点i是否为终点t,若是则转第6步;否则,记k=i,转第2步。
第6步:确定最短路径长度和最短路径。最短路径的长度为终点t的标号值d t;根据终点t的先前点p t逆向追踪可得到s到点t的最短路径。
由此可见,求解最短路径的迪克斯查算法有两大特点,一是其节点搜索是广度优先的;二是
选择下一个标记点是以其到出发点s的路径最短为标准的。
4.2实践演练
求图1中顶点v0到v5的最短路径。
解设k表示步骤,k=0时,表示运算开始。
(1)令d(v0)=0,其余顶点为v i,令d(v i)=∞,i=1,2,3,4,5。此时v0标号为0,并t←v0。
(2)k=1,计算
d(v1)=min{d(v1),d(v0)+l(v0,v1)}=min{∞,0+1}=1,记为v0v1;
d(v2)=min{d(v2),d(v0)+l(v0,v2)}=min{∞,0+4}=4,记为v0v2;
d(v3)=min{d(v3),d(v0)+l(v0,v3)}=min{∞,0+∞}=∞;
d(v4)=min{d(v4),d(v0)+l(v0,v4)}=min{∞,0+∞}=∞;
d(v5)=min{d(v5),d(v0)+l(v0,v5)}=min{∞,0+∞}=∞。
因为d(v1)=1=min{d(v1),d(v2),d(v3),d(v4),d(v5)},所以选顶点v1,对v1作标号1/v0。v0与v1相邻。
(3)由于v5未标号,将t←v1,回到(2)继续计算。
(2)k=2,计算
d(v2)=min{d(v2),d(v1),+l(v1,v2)}=min{4,1+2}=3,记为v1v2;
d(v3)=min{d(v3),d(v1),+l(v1,v3)}=min{∞,1+7}=8,记为v1v3;
d(v4)=min{d(v4),d(v1),+l(v1,v4)}=min{∞,1+5}=6,记为v1v4;
d(v5)=min{d(v5),d(v1),+l(v1,v5)}=min{∞,1+∞}=∞。
因为d(v2)=3=min{d(v2),d(v3),d(v4),d(v5)},所以选项点v2,对v2作标号3/v1。v1与
v2相邻。
(3)由于v5未标号,将t←v2,回到(2)继续计算。
(2)k=3,计算
d(v3)=min{d(v3),d(v2),+l(v2,v3)}=min{8,3+∞}=8;
d(v4)=min{d(v4),d(v2),+l(v2,v4)}=min{6,3+1}=4,记为v2v4;
d(v5)=min{d(v5),d(v2),+l(v2,v5)}=min{∞,3+∞}=∞。
因为d(v4)=4=min{d(v3),d(v4),d(v5)},所以选顶点v4,对v4作标号4/v2。v2与v4相邻。
(3)由于v5未标号,将t←v4,回到(2)继续计算。
(2)k=4,计算
d(v3)=min{d(v3),d(v4),+l(v4,v3)}=min{8,4+3}=7,记为v4v3;
d(v5)=min{d(v5),d(v4),+l(v4,v5)}=min{∞,4+6}=10,记为v4v5。