首頁  >  文章  >  最短路徑問題

最短路徑問題

(*-*)浩
(*-*)浩原創
2019-06-15 09:09:2838104瀏覽

最短路徑問題是圖論研究中的經典演算法問題, 旨在尋找圖(由結點和路徑組成的)中兩結點之間的最短路徑。 最短路徑問題是組合最佳化領域的經典問題之一,它廣泛應用於電腦科學、交通工程、通訊工程、系統工程、運籌學、資訊理論、控制理論等眾多領域。 Dijkstra演算法是經典的最短路徑演算法。

最短路徑問題

演算法具體的形式包括:(推薦學習:PHP影片教學

確定起點的最短路徑問題- 即已知起始結點,求最短路徑的問題。

確定終點的最短路徑問題 - 與確定起點的問題相反,該問題是已知終結結點,求最短路徑的問題。在無向圖中該問題與確定起點的問題完全等同,在有向圖中該問題等同於把所有路徑方向反轉的確定起點的問題。

確定起點終點的最短路徑問題 - 即已知起點和終點,求兩結點之間的最短路徑。

全域最短路徑問題 - 求圖中所有的最短路徑。

Dijkstra演算法

Dijkstra演算法是經典的最短路徑演算法,其基本思想是:設定一個集合S存放已經找到最短路徑的頂點,S的初始狀態只包含源點v,對vi∈V-S,假設從源點v到vi的有向邊為最短路徑。以後每求得一條最短路徑v, …, vk,就將vk加入集合S中,並將路徑v, …, vk , vi與原來的假設相比較,取路徑長度較小者為最短路徑,重複上述過程,直到集合V中全部頂點加入到集合S。使用此演算法找到的是全域最優的最短路徑,當網路節點數量大、網路邊數較多時,有記憶體佔用大、時間複雜度高等不足,且Dijkstra演算法無法很好地解決含必經點約束的最短路徑問題。

蟻群演算法

蟻群演算法是由Dorigo、Maniezzo和Colorni等於1991 年首先提出來的,它來自螞蟻尋食的行為。透過研究發現,螞蟻個體之間是透過一種稱為信息素的外激素進行訊息傳遞的。螞蟻在行走過程中能感知周圍費洛蒙的強度, 並朝著費洛蒙濃度高的方向移動,當某隻螞蟻發現食物時,它在回巢的過程當中,會在返回的路上釋放信息素作為標記,同伴發現後會沿著此路尋找到食物。當同伴中多隻螞蟻都發現了食物但路徑長短不同時,因為螞蟻在短的路徑上往返所需要的時間相對較小,所以單位時間內走過的螞蟻越來越多,在這條路徑上的費洛蒙濃度就會越強,因此,該路徑上的螞蟻就會越來越多,逐漸選出一條最優的道路。

分類

可分成兩個子問題,即單源最短路徑問題和所有頂點對之間的最短路徑問題。前者是找出從某一頂點出發到圖中所有其他頂點的最短路徑,主要演算法有迪克斯徹演算法等;後者是求圖中每一對頂點之間的最短路徑,主要演算法有弗洛伊德算法等。

更多PHP相關技術文章,請造訪PHP圖文教學欄位進行學習!

以上是最短路徑問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn