最短路问题及应用摘要:主要介绍最短路的两种算法,迪杰斯特拉(Dijkstra)及弗罗伊德(Floyd)算法以及这两种算法在实际问题中的应用和比较。
关键词:最短路获克斯特拉(Dijkstra),弗罗伊德(Floyd)算法1.引言图论是应用数学的一个分支,它的概念和结果来源非常广泛,最早起源于一些数学游戏的难题研究,如欧拉所解决的哥尼斯堡七桥问题,以及在民间广泛流传的一些游戏难题,如迷宫问题、博弈问题、棋盘上马的行走路线问题等。
这些古老的难题,当时吸引了很多学者的注意。
在这些问题研究的基础上又继续提出了著名的四色猜想和汉米尔顿(环游世界)数学难题。
1847年,图论应用于分析电路网络,这是它最早应用于工程科学,以后随着科学的发展,图论在解决运筹学,网络理论,信息论,控制论,博弈论以及计算机科学等各个领域的问题时,发挥出越来越大的作用在实践中,图论已成为解决自然科学、工程技术、社会科学、军事等领域中许多问题的有力工具之一。
最短路问题是图论理论的一个经典问题。
寻找最短路径就是在指定网络中两结点间找一条距离最小的路。
最短路不仅仅指一般地理意义上的距离最短,还可以引申到其它的度量,如时间、费用、线路容量等。
最短路径算法的选择与实现是通道路线设计的基础,最短路径算法是计算机科学与地理信息科学等领域的研究热点,很多网络相关问题均可纳入最短路径问题的范畴之中。
经典的图论与不断发展完善的计算机数据结构及算法的有效结合使得新的最短路径算法不断涌现。
2.最短路算法2.1 最短路的定义对最短路问题的研究早在上个世纪60年代以前就卓有成效了,其中对赋权图()0w≥的有效算法是由荷兰著名计算机专家E.W.Dijkstra在1959年首次提出的,该ij算法能够解决两指定点间的最短路,也可以求解图G中一特定点到其它各顶点的最短路。
后来海斯在Dijkstra 算法的基础之上提出了海斯算法。
但这两种算法都不能解决含有负权的图的最短路问题。
因此由Ford 提出了Ford 算法,它能有效地解决含有负权的最短路问题。
但在现实生活中,我们所遇到的问题大都不含负权,所以我们在()0ijw≥的情况下选择Dijkstra 算法。
若图(,)G V E =中各边e 都赋有一个实数()W e ,称为边e 的权,则称这种图为赋权图,记为(,,)G V E W .设G 是带权图,,s t v v 是G 的两个顶点,P 是G 中从s v 到t v 的一条通路,定义路P 的权为P 中所有边的权之和,记为()W P 。
最短路就是在所有从s v 到t v 的路中,求一条权最小的路,即求一条从s v 到t v 的路0P ,使0()min ()PW P W P =上式中对G 中所有从s v 到t v 的路P 取最小,称0P 为从s v 到t v 的最短路。
2.2 最短路问题算法的基本思想及基本步骤在求解网络图上节点间最短路径的方法中,目前国内外一致公认的较好算法有迪杰斯特拉(Dijkstra)及弗罗伊德(Floyd)算法。
这两种算法中,网络被抽象为一个图论中定义的有向或无向图,并利用图的节点邻接矩阵记录点间的关联信息。
在进行图的遍历以搜索最短路径时,以该矩阵为基础不断进行目标值的最小性判别,直到获得最后的优化路径。
Dijkstra 算法是图论中确定最短路的基本方法,也是其它算法的基础。
为了求出赋权图中任意两结点之间的最短路径,通常采用两种方法。
一种方法是每次以一个结点为源点,重复执行Dijkstra 算法n 次。
另一种方法是由Floyd 于1962年提出的Floyd 算法,其时间复杂度为()3O n ,虽然与重复执行Dijkstra 算法n 次的时间复杂度相同,但其形式上略为简单,且实际运算效果要好于前者。
2.2.1 Dijkstra 算法Dijkstra 算法基本步骤: 令:{}{}23,1,,,,i n S v i S v v v ===并令:()()10j j W v v S T v ⎧=⎨∈=∞⎩1、对j v S ∈,求()(){}()min ,j i ij j T v W v W T v +=.2、求(){}min j j v ST v ∈得()k T v ,使()(){}min j k j v ST v T v ∈=,令()()k k W v T v =.3、若k n v v =则已找到1v 到n v 的最短路距离()k W v ,否则令i k =从S 中删去i v 转1这样经过有限次迭代则可以求出1v 到n v 的最短路线,可以用一个流程图来表示:第一步,先取()10W v =意即1v 到1v 的距离为0,而()j T v 是对()j T v 所赋的初值。
第二步,利用()1W v 已知,根据()(){}min ,j i ij T v W v w +对()j T v 进行修正。
第三步,对所有修正后的()j T v 求出其最小者()k T v .其对应的点k v 是1v 所能一步到达的点j v 中最近的一个,由于所有()0W u ≥.因此任何从其它点j v 中转而到达k v 的通路上的距离都大于1v 直接到k v 的距离()k T v ,因此()k T v 就是1v 到k v 的最短距离,所以在算法中令()()k k W v T v =并从S 中删去k v ,若k n =则()()k n W v W v =就是1v 到n v 的最短路线,计算结束。
否则令i k v v =回到第二步,继续运算,直到k n =为止。
这样每一次迭代,得到1v 到一点k v 的最短距离,重复上述过程直到k n v v =.2.2.2 Floyd 算法的基本原理和实现Floyd 算法的基本原理和实现方法为:如果一个矩阵ij D d ⎡⎤=⎣⎦其中0ij d >表示i 与2,3,,n ,,}n S v =(),j T v v ⇒j 间的距离,若i 与j 间无路可通,则ij d 为无穷大。
i 与j 间的最短距离存在经过i 与j 间的k 和不经过k 两种情况,所以可以令1,2,3,,k n = (n 为节点数)。
检查ij d 与ik kj d d +的值,此时ik d 与kj d 分别为已知的i 到k 与k 到j 的最短距离。
因此,ik kj d d +就是i 到j 经过k 的最短距离。
所以,若有ij ik kj d d d >+.就表示从i 出发经k 再到j 的距离要比原来的i 到j 距离短,自然把i 到j 的ij d 重写成ik kj d d +.每当一个k 搜索完,ij d 就是目前i 到j 的最短距离。
重复这一过程,最后当查完所有k 时,ij d 就为i 到j 的最短距离。
3.最短路的应用红军某团接上级命令从驻地1v 出发到地域6v 集结待命。
1v 到6v 公路分布情况如下图,每条公路为图中的边,边上的权数表示该段公路的长度(单位:百公里),求该团从1v 到6v 应选择哪一路线使所走的路程最短?解:首先设每百公里所用费用相同,求1v 到6v 的费用最少,既求1v 到6v 的最短路线。
为了方便计算,先作出该网络的距离矩阵,如下:1234561234560525015921081058025910202520v v v v v v v v L v v v v ⎡⎤⎢⎥∞∞∞⎢⎥⎢⎥∞⎢⎥=∞⎢⎥⎢⎥∞⎢⎥∞⎢⎥⎢⎥∞∞∞⎣⎦(0)设()(){}1234560,,,,,,j W v T v v S v v v v v ==∞∈=, (1)第一次迭代①计算(),2,3,4,5,6j T v j =如下()()(){}{}22112min ,min ,055T v T v W v W =+=∞+= ()()(){}{}33113min ,min ,022T v T v W v W =+=∞+= ()()(){}{}44114min ,min ,0T v T v W v W =+=∞+∞=∞()5T v =∞ ()6T v =∞②取(){}()3min 2j j v ST v T v ∈==,令()()332W v T v ==③由于()36k n =≠=,令{}2456,,,,3S v v v v i ==转(1) 第二次迭代:①计算(),2,4,5,6j T v j =如下()()(){}{}22323min ,min 5,213T v T v W v W =+=+= ()()(){}{}44334min ,min 8,288T v T v W v W =+=+= ()()(){}{}55335min ,min 10,21010T v T v W v W =+=+= ()()(){}{}66336min ,min ,2T v T v W v W =+=∞+∞=∞②取(){}()2min 3j jv ST v T v ∈==令()()223W v T v ==③由于()26k n =≠=,令{}456,,,2S v v v i ==转(1) 第三次迭代:①计算(),4,5,6j T v j =如下()()(){}{}44224min ,min 8,358T v T v W v W =+=+= ()()(){}{}55225min ,min 10,3910T v T v W v W =+=+=()6T v =∞②取(){}()()()444min 8,8j j v ST v T v W v T v ∈====③由于()46k n =≠=,令{}56,,4S v v i ==转(1) 第四次迭代:①计算(),5,6j T v j =如下()()(){}{}55445min ,min 10,2810T v T v W v W =+=+= ()()(){}{}66446min ,min ,8513T v T v W v W =+=∞+=②取(){}()()()555min 10,10j jv ST v T v W v T v ∈====③由于()56k n =≠=,令{}6S v =转(1) 第五次迭代:①计算(),6j T v j =如下()()(){}{}66556min ,min 13,10212T v T v W v W =+=+=②由于6k n ==.因此已找到1v 到6v 的最短距离为12.计算结束。
找最短路线:逆向追踪得132456v v v v v v →→→→→,最短距离为12,即红军某团驻地1v 到集结地域6v 的距离最短路线。
4.结束语将最短路理论应用到军事活动当中,尤其是在行军路线的选择上应用具有很重要的意义。
将行军的路线缩小为最短,利用军队在执行军事任务的过程中在最短的时间内达到预期目的,同时也凸显出学习和应用最短路问题原理的重要性。