-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
最短路徑算法例子(最短路徑算法例題)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于最短路徑算法例子的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、最短路徑法如何計(jì)算
最短路徑算法有三種,F(xiàn)loyd,dijkstra,Bellman_Ford。其中,F(xiàn)loyd適合用于計(jì)算每兩點(diǎn)間的路徑,dijkstra適合稀疏圖,bellman則適合稠密圖中的已知起點(diǎn)終點(diǎn),計(jì)算最短路徑的問題。時間復(fù)雜度,floyd算法為n立方,dijk為n平方,bellman為n平方,其中n是點(diǎn)數(shù)。dijk可用堆維護(hù),時間復(fù)雜度可減至nlogn,而bellman可用隊(duì)列維護(hù),此方法于1994年被國人提出,命名比較土鱉叫SPFA(shortest path faster algorithm。。。)。至于如何計(jì)算,有了名字,搜一下就ok。
二、求寫最短路徑算法。由A地到E地,途經(jīng)B(B1,B2,B3)C(C1,C2,C3)地,基于矩陣乘法求最短路徑。給出步驟
們把求A →E 的最短路分解為四個階段A →B →C→D →E 來求解。每一個階段可以用一個矩陣來表示,這個矩陣稱為權(quán)矩陣。相鄰階段的路徑可以用權(quán)矩陣的乘積來表示。但這里的矩陣乘法和普通矩陣乘積運(yùn)算的區(qū)別是:普通矩陣乘積其對應(yīng)元素是相應(yīng)元素乘積的代數(shù)和,這里把元素相乘改為相加,元素的代數(shù)和改為取小運(yùn)算,如果不同層節(jié)點(diǎn)間沒有連接,則視它們之間的距離為無窮大. 如果是求極大,改為取大運(yùn)算,此時如果不同層節(jié)點(diǎn)間沒有連接,則視它們的距離為0。
如下:
由A地到B地的距離可表示為:A[2 5 8]
由B地到C地的權(quán)矩陣可表示為
[3,6,5;7,10,8;4,9,6]
因此由A到C的權(quán)矩陣為[2,5,8][3,6,5;7,10,8;4,9,6]=[5,8,7]
因此由A到D的權(quán)矩陣為[5,8,7)][7,5;3,4;5,2]=[11 ,9]
由A→E的權(quán)矩陣為:[11 ,9][4,2)]=[15,11]
因此從家里到學(xué)校的最短距離為11百米,最近的路徑為從A地出發(fā)經(jīng)過B1地C1地D2地到達(dá)E地。
下面我們給出基于“矩陣乘法”求解最短路的算法:
第一階段:計(jì)算出圖中從起始點(diǎn)到終點(diǎn)最短路的長度.
step1 劃分出該網(wǎng)絡(luò)圖中的層次關(guān)系(網(wǎng)絡(luò)劃分為N 層,起點(diǎn)為第一層,終點(diǎn)為第N 層) ;
step2 依次給出從第i 層到第i + 1 層的權(quán)矩陣( i= 1 ,2 , …, N21) ; (若第i 層有m 個頂點(diǎn);第i + 1 層有n
個頂點(diǎn), 則從第i 層到第i + 1 層的權(quán)矩陣為m *n
階) .
step3 按照我們定義的矩陣乘法計(jì)算出最短路的
數(shù)值.
第二階段:尋找最短路所經(jīng)過的中間點(diǎn).
(利用第一階段中step2 的數(shù)據(jù)) 計(jì)算出從第i 層到
終點(diǎn)的最短路, 對比與i21 層到終點(diǎn)的最短路, 從而確
定出第i 層上最短路所經(jīng)過的頂點(diǎn)( i = 2 , …, N21) .
三、求解:圖論中常見的最短路徑算法有幾種?都是什么?
算法 Algorithm
算法是在有限步驟內(nèi)求解某一問題所使用的一組定義明確的規(guī)則。通俗點(diǎn)說,就是計(jì)算機(jī)解題的過程。在這個過程中,無論是形成解題思路還是編寫程序,都是在實(shí)施某種算法。前者是推理實(shí)現(xiàn)的算法,后者是操作實(shí)現(xiàn)的算法。
一個算法應(yīng)該具有以下五個重要的特征:
1、有窮性: 一個算法必須保證執(zhí)行有限步之后結(jié)束;
2、確切性: 算法的每一步驟必須有確切的定義;
3、輸入:一個算法有0個或多個輸入,以刻畫運(yùn)算對象的初始情況,所謂0個輸入是指算法本身定除了初始條件;
4、輸出:一個算法有一個或多個輸出,以反映對輸入數(shù)據(jù)加工后的結(jié)果。沒有輸出的算法是毫無意義的;
5、可行性: 算法原則上能夠精確地運(yùn)行,而且人們用筆和紙做有限次運(yùn)算后即可完成。
算法的設(shè)計(jì)要求
1)正確性(Correctness)
有4個層次:
A.程序不含語法錯誤;
B.程序?qū)捉M輸入數(shù)據(jù)能夠得出滿足規(guī)格要求的結(jié)果;
C.程序?qū)倪x擇的、典型的、苛刻的、帶有刁難性的幾組輸入數(shù)據(jù)能夠得出滿足規(guī)格要求的結(jié)果;
D.程序?qū)σ磺泻戏ǖ妮斎霐?shù)據(jù)都能產(chǎn)生滿足規(guī)格要求的結(jié)果。
2)可讀性(Readability)
算法的第一目的是為了閱讀和交流;
可讀性有助于對算法的理解;
可讀性有助于對算法的調(diào)試和修改。
3)高效率與低存儲量
處理速度快;存儲容量小
時間和空間是矛盾的、實(shí)際問題的求解往往是求得時間和空間的統(tǒng)一、折中。
算法的描述 算法的描述方式(常用的)
算法描述 自然語言
流程圖 特定的表示算法的圖形符號
偽語言 包括程序設(shè)計(jì)語言的三大基本結(jié)構(gòu)及自然語言的一種語言
類語言 類似高級語言的語言,例如,類PASCAL、類C語言。
算法的評價 算法評價的標(biāo)準(zhǔn):時間復(fù)雜度和空間復(fù)雜度。
1)時間復(fù)雜度 指在計(jì)算機(jī)上運(yùn)行該算法所花費(fèi)的時間。用“O(數(shù)量級)”來表示,稱為“階”。
常見的時間復(fù)雜度有: O(1)常數(shù)階;O(logn)對數(shù)階;O(n)線性階;O(n^2)平方階
2)空間復(fù)雜度 指算法在計(jì)算機(jī)上運(yùn)行所占用的存儲空間。度量同時間復(fù)雜度。
時間復(fù)雜度舉例
(a) X:=X+1 ; O(1)
(b) FOR I:=1 TO n DO
X:= X+1; O(n)
(c) FOR I:= 1 TO n DO
FOR J:= 1 TO n DO
X:= X+1; O(n^2)
“算法”一詞最早來自公元 9世紀(jì) 波斯數(shù)學(xué)家比阿勒·霍瓦里松的一本影響深遠(yuǎn)的著作《代數(shù)對話錄》。20世紀(jì)的 英國 數(shù)學(xué)家 圖靈 提出了著名的圖靈論點(diǎn),并抽象出了一臺機(jī)器,這臺機(jī)器被我們稱之為 圖靈機(jī) 。圖靈的思想對算法的發(fā)展起到了重要的作用。
算法是 計(jì)算機(jī) 處理信息的本質(zhì),因?yàn)?計(jì)算機(jī)程序 本質(zhì)上是一個算法,告訴計(jì)算機(jī)確切的步驟來執(zhí)行一個指定的任務(wù),如計(jì)算職工的薪水或打印學(xué)生的成績單。 一般地,當(dāng)算法在處理信息時,數(shù)據(jù)會從輸入設(shè)備讀取,寫入輸出設(shè)備,可能保存起來以供以后使用。
這是算法的一個簡單的例子。
我們有一串隨機(jī)數(shù)列。我們的目的是找到這個數(shù)列中最大的數(shù)。如果將數(shù)列中的每一個數(shù)字看成是一顆豆子的大小 可以將下面的算法形象地稱為“撿豆子”:
首先將第一顆豆子(數(shù)列中的第一個數(shù)字)放入口袋中。
從第二顆豆子開始檢查,直到最后一顆豆子。如果正在檢查的豆子比口袋中的還大,則將它撿起放入口袋中,同時丟掉原先的豆子。 最后口袋中的豆子就是所有的豆子中最大的一顆。
下面是一個形式算法,用近似于 編程語言 的 偽代碼 表示
給定:一個數(shù)列“l(fā)ist",以及數(shù)列的長度"length(list)" largest = list[1] for counter = 2 to length(list): if list[counter] > largest: largest = list[counter] print largest
符號說明:
= 用于表示賦值。即:右邊的值被賦予給左邊的變量。
List[counter] 用于表示數(shù)列中的第 counter 項(xiàng)。例如:如果 counter 的值是5,那么 List[counter] 表示數(shù)列中的第5項(xiàng)。
<= 用于表示“小于或等于”。
算法的分類
(一)基本算法 :
1.枚舉
2.搜索:
深度優(yōu)先搜索
廣度優(yōu)先搜索
啟發(fā)式搜索
遺傳算法
(二)數(shù)據(jù)結(jié)構(gòu)的算法
(三)數(shù)論與代數(shù)算法
(四)計(jì)算幾何的算法:求凸包
(五)圖論 算法:
1.哈夫曼編碼
2.樹的遍歷
3.最短路徑 算法
4.最小生成樹 算法
5.最小樹形圖
6.網(wǎng)絡(luò)流 算法
7.匹配算法
(六)動態(tài)規(guī)劃
(七)其他:
1.數(shù)值分析
2.加密算法
3.排序 算法
4.檢索算法
5.隨機(jī)化算法
四、圖論中常見的最短路徑算法有幾種?都是什么
主要是有三種、、
第一種是最直接的貪心dijkstra算法、、可以利用堆數(shù)據(jù)結(jié)構(gòu)進(jìn)行優(yōu)化、、缺點(diǎn)就是不能求有負(fù)權(quán)的最短路與判斷負(fù)環(huán)、、
第二種是bellman-ford算法、、根據(jù)松弛操作的性質(zhì)是可以來判斷負(fù)環(huán)的、、時間復(fù)雜度是O(nm)的、、
第三種是SPFA算法、、把他單獨(dú)拿出來作為一種算法并不是非常好的、、他的實(shí)質(zhì)應(yīng)該是上面的bellman-ford算法的隊(duì)列優(yōu)化時間復(fù)雜度更低、O(KE)、K的值約等于2、、
以上就是關(guān)于最短路徑算法例子相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀:
如何求最短路徑(如何求最短路徑數(shù)據(jù)結(jié)構(gòu))
曲線景觀設(shè)計(jì)怎么畫好看(曲線景觀設(shè)計(jì)怎么畫好看圖片)