国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

兩類經(jīng)典算法求最短路問題剖析

2015-07-05 09:21韋艷肖
2015年35期

韋艷肖

摘 要:舉例說明Dijkstra算法和Floyd算法求最短路問題,通過規(guī)定起點(diǎn)、終點(diǎn)、各點(diǎn)之間權(quán)值的大小,找出了最短路徑,求出最短路長,并增加負(fù)權(quán)值、方向和閉合回路來分別研究兩種算法在運(yùn)算中的利弊以及適用性。

關(guān)鍵詞:Dijkstra算法;Floyd算法;最短路

1.引言

眾所周知,最短路算法有兩種基本算法,一是指定的頂點(diǎn)之間的最短路徑算法,二是所有頂點(diǎn)之間的最短路算法,其中所有頂點(diǎn)間最短路算法更具有代表性。目前,求最短路問題的方法很多,各有優(yōu)劣性,而實(shí)際應(yīng)用中以兩類經(jīng)典算法居多,分別是1959年E.W.Dijkstra提出的Dijkstra算法和1962年Floyd提出的Floyd算法。

1.1 Dijkstra算法

Dijkstra算法的基本思想是:若起點(diǎn)vs到終點(diǎn)vt的最短路經(jīng)過點(diǎn)v1,v2,v3,則v1到vt的最短路是p1t={v1,v2,v3,vt},v2到vt的最短路是p2t={v2,v3,vt},v3到vt的最短路是p3t={v3,vt},Dijkstra算法是在圖上進(jìn)行一種標(biāo)號迭代的過程。不妨設(shè)?。╥,j)的長度為cij≥0,vi到vj的最短路記為pij,最短路長記為Lij。Dijkstra算法的基本步驟如下[1-2]:

(1)找出所有起點(diǎn)vi已標(biāo)號,終點(diǎn)vj未標(biāo)號的弧,集合為B={(i,j)︱vi已標(biāo)號;vj未標(biāo)號},如果這樣的弧不存在或已標(biāo)號則計算結(jié)束。

(2)計算集合B中弧的標(biāo)號:k(i,j)=b(i)+cij。

(3)b(l)=minj{k(i,j)|(i,j)∈B},在弧的終點(diǎn)vl標(biāo)號b(l),返回步驟(1)。

完成步驟(1)~(3)為一輪計算,每一輪計算至少得到一個點(diǎn)的標(biāo)號,最多通過n輪計算得到最短路。

1.2 Floyd算法

Floyd算法是一種矩陣迭代方法,也是一種表格迭代方法,對于求任意點(diǎn)間最短路、混合圖的最短路、有負(fù)權(quán)圖的最短路等一般網(wǎng)絡(luò)問題來說是比較有效的,F(xiàn)loyd算法的基本步驟如下[1-2]:

(1)寫出vi一步到達(dá)vj的距離矩陣L1=(L(1)ij),L1也是一步到達(dá)的最短距離矩陣。如果vi 與vj之間沒有關(guān)聯(lián),則令cij=+∞。

(2)計算兩步最短矩陣。設(shè)vi到vj經(jīng)過一個中心點(diǎn)vr,要兩步到達(dá)vj,則vi到vj的最短距離為L(2)ij=minr{cir+crj},最短距離矩陣為L2=(L(2)ij)。

(3)計算k步最短距離矩陣。設(shè)vi經(jīng)過中間點(diǎn)vr到達(dá)vj,vi經(jīng)過k-1步到達(dá)點(diǎn)vr的最短距離為L(k-1)ir,vr經(jīng)過k-1步到達(dá)點(diǎn)vj的最短距離為L(k-1)rj,則vi經(jīng)k步到達(dá)vj的最短距離為L(k)ij=minr{L(k-1)ir+L(k-1)rj},最短距離矩陣為Lk=(L(k)ij)。

(4)比較矩陣Lk與Lk-1,當(dāng)LK=Lk-1時得到任意兩點(diǎn)間的最短距離矩陣Lk。

2.具體應(yīng)用

本節(jié)中通過具體例子,如圖1,圖2所示,利用Dijkstra算法和Floyd算法分別求出頂點(diǎn)v1到頂點(diǎn)v8的最短路以及最短路長。

即得出v1到v8的最短距離為18,其所對應(yīng)的最小生成樹和最短路線圖分別如圖2-8和2-9所示:

3.算法分析

綜上,通過具體例子介紹和分析了Dijkstra算法和Floyd算法這兩種非常經(jīng)典的最短路算法??傻肈ijkstra算法是主要用于解決無負(fù)權(quán)值的有向圖和無向圖的最短路算法,F(xiàn)loyd算法是通過矩陣運(yùn)算來求解網(wǎng)絡(luò)中的最短路問題的方法。這兩種算法都可計算一個結(jié)點(diǎn)到其它結(jié)點(diǎn)的最短路徑。Dijkstra算法是運(yùn)用表上做圖的方式一個一個點(diǎn)的添加,根據(jù)最小的權(quán)值的選擇依次對各點(diǎn)進(jìn)行標(biāo)號,直到將所有的點(diǎn)都標(biāo)上號,從而找出最短路徑。而Floyd算法是首先將所有的點(diǎn)都標(biāo)出,將各點(diǎn)間的權(quán)值反應(yīng)在矩陣上,再用矩陣計算出最優(yōu)矩陣。Dijkstra算法的優(yōu)點(diǎn)是算法比較簡單明了,不易出錯,但是也有缺點(diǎn),主要是步驟卻非常繁瑣。Floyd算法的算法雖然說有點(diǎn)復(fù)雜,但是效率比較高,在計算時能夠節(jié)約時間。綜上所述,兩種算法的差別很大,但是效果卻是相同的。我們在實(shí)際的運(yùn)用中可以按各自的需求選擇合適的方法。(作者單位:河池學(xué)院數(shù)學(xué)與統(tǒng)計學(xué)院)

基金項(xiàng)目:廣西高??茖W(xué)研究項(xiàng)目(201010LX481),廣西高等教育教學(xué)改革工程項(xiàng)目(2015JGA552)

參考文獻(xiàn):

[1] 嚴(yán)蔚敏.吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言)[M].北京:清華大學(xué)大學(xué)出版社,2007.

[2] 王桂平.王衍.任嘉辰.圖論算法理論、實(shí)現(xiàn)及應(yīng)用[M].北京:北京大學(xué)出版,2011.

[3] 王朝瑞.圖論[M].北京:北京理工大學(xué)出版社,2002.

[4] 嚴(yán)寒冰等.基于GIS的城市道路網(wǎng)最短路徑算法探討.計算機(jī)學(xué)報,2000,23(2):210-215.

[5] 徐鳳生.最短路徑的求解算法[J].計算機(jī)應(yīng)用,2004,24(5):88- 89.

[6] 張新元.最短路問題的Seidel迭代[J].數(shù)學(xué)的實(shí)踐與認(rèn)識,1993,7(2):18-21.

[7] 林華珍,周根貴.求解最短路問題的一種優(yōu)化矩陣算法[J].長江大學(xué)學(xué)報(自然科學(xué)版),2007,4(4):14-16.

西畴县| 太原市| 上杭县| 东海县| 高淳县| 青铜峡市| 姜堰市| 沧州市| 福贡县| 成武县| 房山区| 东莞市| 赞皇县| 荔浦县| 阿拉善盟| 崇仁县| 南岸区| 岑溪市| 汝阳县| 抚松县| 朔州市| 西吉县| 长沙县| 扶余县| 荔波县| 射阳县| 平泉县| 三亚市| 大安市| 苍梧县| 固安县| 资源县| 洛浦县| 宜兴市| 丘北县| 临漳县| 建始县| 聂荣县| 罗甸县| 子洲县| 巨鹿县|