组合数学答案——最短路径的并行算法综述

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

组合数学答案——最短路径的并行算法综述最短路径问题是图论中的一个典范问题,它被应用于众多领域。最短路径问题可以分

成两类:单源最短路径、所有顶点对间的最短路径。本文对最短路径的并行算法进行综述,

并介绍目前最短路径问题中的一个热点问题K条最短路径。

最短路径,单源最短路径,所有顶点对间的最短路径,K条最短路径

1.

二十世纪中后期,随着计算机的出现和发展,图论的研究得到广泛重视,最短路径问题

是图论中的一个典范问题,它已经被应用于众多领域。最短路径问题最直接的应用当数在地

理信息领域,如:GIS网络分析、城市规划、电子导航等。在交通咨询方面,寻找交通路网

中两个城市间最短的行车路线就是最短路径问题的一个典型的例子。在网络通信领域,信息

包传递的路径选择问题也与最短路径问题息息相关。举个例子,OPSF开放路由选择协议,每个OPSF路由器都维护一个描述自治系统拓扑结构的数据库,通过这个数据库构建最短路径

树来计算路由表,从而跟踪自治系统范围内到每个目标的最短路径。在图象分割问题中,最

短路径也有直接的应用:在语音识别中,一个主要的问题就是区别同音词,例如,to、two、too。为解决这个问题,我们需要建一个图,顶点代表可能的单词,边连接相邻的单词,边上

的权代表相邻的可能行大小。这样图中的最短路径,就是对句子的最好解释。

由于最短路径问题的广泛应用,很多学者都对此进行了深入的研究,也产生了一些经典

的算法。近些年来,对最短路径研究的热度依然不减,并且时间复杂度降得越来越低。

总的来讲,最短问题可以分成两类:单源最短路径和所有顶点对间的最短路径。本文就

从上述两类来分别介绍最短路径的并行算法,并介绍最短路径问题中的一个热点问题K条最短路径问题。

本文的其它部分组织如下:第2节介绍单源最短路径问题的并行算法;第3节介绍所有

1

顶点对间的最短路径问题的并行算法;第4节介绍K条最短路径问题;最后在第5节总结最短路径的并行算法,并谈谈自己的想法。

2.

单源最短路径问题是指从一个给定顶点S到其它所有顶点i之间的距离dist(i)为最短的路径,其中s?V称为源点,i?V且i?s。假定图G(V,E)是一个有向网络,其加权邻接矩阵为

W,且边上权值w(i,j)>0,i,j?V,V={1,2,…,n}。

2.1.

在单处理机上,人们研究最短路径问题已取得许多成果,设计了几十种算法,其中Dijkstra算法是解决这个问题的最有效算法之一。在串行情况下,该算法的时间复杂度为O(m+nlogn)。其基本思想是:假定有一个待搜索顶点表VL,初始化时做:dist(s)?0;dist(i)??(i?s);VL?V。算法执行时,每次从VL(?Φ)中选取这样一个顶点u,它的dist(u)值最小。将选出的u作为搜索顶点,若?E,而且dist(u)+w(u,v)

算法1 DIJKSTRA ALGORITHM(SISD)

输入:加权邻接矩阵W,约定i,j之间无边连接时w(i,j)=?,且w(i,i)=?;

输出:dist(1:n),其中,dist(i)表示顶点s到顶点i的最短路径

(1?i?n)。

begin

/*初始化*/

(1) dist(s)?0;

(2) for i?1 to n do

if i?s then dist(i)?? endif

endfor;

(3) VL?V;

(4) For i?1 to n do /*找最短距离*/

(5) Find a vertex u?VL,such that dist(u) is minimal;

2

(6) For each(?E) ? (v?VL) do

If dist(u)+w(u,v)

endfor;

(7) VL?VL-{u}

Endfor

End.

除了Dijkstra算法外,Moore算法解决单源最短路径问题也是较有效的。在Moore算法中,设源点为s?V,从s到其它各顶点的最短路径长度用一个一维数组dist存储。首先置dist(s)=0,dist(v)??,v?s,v?V。Moore算法同Dijkstra算法不同之处是:将Dijkstra算法中的待搜索顶点表替换成待搜索队列。算法开始执行时,队列仅含源点s。以后每次只要待搜索队列非空,则将队头的顶点从队列中移出作为本次搜索的顶点,然后检查u的所有射出边?E。若

dist(u)+w(u,v)

输入:有向图G(V,E)的加权邻接矩阵W={w},i,j?V; ij

输出:从源s到所有其它顶点i(i?s)的最短路径dist(i),i?V。

begin

(1) for i?1 to n do /*初始化*/

call INITIALIZE(i)

endfor;

(2) insert s into the queue; /*插入s到队列中*/

(3) while the queue is not empty do

(4) call SEARCH

endwhile

end.

相关文档
最新文档