求解 圖論中常見的最短路徑演算法有幾種?都是什麼

時間 2021-10-15 00:06:21

1樓:奇倫_射手

主要是有三種、、

第一種是最直接的貪心dijkstra演算法、、可以利用堆資料結構進行優化、、缺點就是不能求有負權的最短路與判斷負環、、

第二種是bellman-ford演算法、、根據鬆弛操作的性質是可以來判斷負環的、、時間複雜度是o(nm)的、、

第三種是spfa演算法、、把他單獨拿出來作為一種演算法並不是非常好的、、他的實質應該是上面的bellman-ford演算法的佇列優化時間複雜度更低、o(ke)、k的值約等於2、、

2樓:匿名使用者

演算法 algorithm

演算法是在有限步驟內求解某一問題所使用的一組定義明確的規則。通俗點說,就是計算機解題的過程。在這個過程中,無論是形成解題思路還是編寫程式,都是在實施某種演算法。

前者是推理實現的演算法,後者是操作實現的演算法。

一個演算法應該具有以下五個重要的特徵:

1、有窮性: 一個演算法必須保證執行有限步之後結束;

2、確切性: 演算法的每一步驟必須有確切的定義;

3、輸入:一個演算法有0個或多個輸入,以刻畫運算物件的初始情況,所謂0個輸入是指演算法本身定除了初始條件;

4、輸出:一個演算法有一個或多個輸出,以反映對輸入資料加工後的結果。沒有輸出的演算法是毫無意義的;

5、可行性: 演算法原則上能夠精確地執行,而且人們用筆和紙做有限次運算後即可完成。

演算法的設計要求

1)正確性(correctness)

有4個層次:

a.程式不含語法錯誤;

b.程式對幾組輸入資料能夠得出滿足規格要求的結果;

c.程式對精心選擇的、典型的、苛刻的、帶有刁難性的幾組輸入資料能夠得出滿足規格要求的結果;

d.程式對一切合法的輸入資料都能產生滿足規格要求的結果。

2)可讀性(readability)

演算法的第一目的是為了閱讀和交流;

可讀性有助於對演算法的理解;

可讀性有助於對演算法的除錯和修改。

3)高效率與低儲存量

處理速度快;儲存容量小

時間和空間是矛盾的、實際問題的求解往往是求得時間和空間的統

一、折中。

演算法的描述 演算法的描述方式(常用的)

演算法描述 自然語言

流程圖 特定的表示演算法的圖形符號

偽語言 包括程式設計語言的三大基本結構及自然語言的一種語言

類語言 類似高階語言的語言,例如,類pascal、類c語言。

演算法的評價 演算法評價的標準:時間複雜度和空間複雜度。

1)時間複雜度 指在計算機上執行該演算法所花費的時間。用「o(數量級)」來表示,稱為「階」。

常見的時間複雜度有: o(1)常數階;o(logn)對數階;o(n)線性階;o(n^2)平方階

2)空間複雜度 指演算法在計算機上執行所佔用的儲存空間。度量同時間複雜度。

時間複雜度舉例

(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世紀 波斯數學家比阿勒·霍瓦里鬆的一本影響深遠的著作《代數對話錄》。20世紀的 英國 數學家 圖靈 提出了著名的圖靈論點,並抽象出了一臺機器,這臺機器被我們稱之為 圖靈機 。圖靈的思想對演算法的發展起到了重要的作用。

演算法是 計算機 處理資訊的本質,因為 計算機程式 本質上是一個演算法,告訴計算機確切的步驟來執行一個指定的任務,如計算職工的薪水或列印學生的成績單。 一般地,當演算法在處理資訊時,資料會從輸入裝置讀取,寫入輸出裝置,可能儲存起來以供以後使用。

這是演算法的一個簡單的例子。

我們有一串隨機數列。我們的目的是找到這個數列中最大的數。如果將數列中的每一個數字看成是一顆豆子的大小 可以將下面的演算法形象地稱為「撿豆子」:

首先將第一顆豆子(數列中的第一個數字)放入口袋中。

從第二顆豆子開始檢查,直到最後一顆豆子。如果正在檢查的豆子比口袋中的還大,則將它撿起放入口袋中,同時丟掉原先的豆子。 最後口袋中的豆子就是所有的豆子中最大的一顆。

下面是一個形式演算法,用近似於 程式語言 的 偽** 表示

給定:一個數列「list",以及數列的長度"length(list)" largest = list[1] for counter = 2 to length(list): if list[counter] > largest:

largest = list[counter] print largest

符號說明:

= 用於表示賦值。即:右邊的值被賦予給左邊的變數。

list[counter] 用於表示數列中的第 counter 項。例如:如果 counter 的值是5,那麼 list[counter] 表示數列中的第5項。

<= 用於表示「小於或等於」。

演算法的分類

(一)基本演算法 :

1.列舉

2.搜尋:

深度優先搜尋

廣度優先搜尋

啟發式搜尋

遺傳演算法

(二)資料結構的演算法

(三)數論與代數演算法

(四)計算幾何的演算法:求凸包

(五)圖論 演算法:

1.哈夫曼編碼

2.樹的遍歷

3.最短路徑 演算法

4.最小生成樹 演算法

5.最小樹形圖

6.網路流 演算法

7.匹配演算法

(六)動態規劃

(七)其他:

1.數值分析

2.加密演算法

3.排序 演算法

4.檢索演算法

5.隨機化演算法

圖論中常見的最短路徑演算法有幾種?都是什麼

3樓:匿名使用者

主要是有三種、、

第一種是最直接的貪心dijkstra演算法、、可以利用堆資料結構進行優化、、缺點就是不能求有負權的最短路與判斷負環、、

第二種是bellman-ford演算法、、根據鬆弛操作的性質是可以來判斷負環的、、時間複雜度是o(nm)的、、

第三種是spfa演算法、、把他單獨拿出來作為一種演算法並不是非常好的、、他的實質應該是上面的bellman-ford演算法的佇列優化時間複雜度更低、o(ke)、k的值約等於2、、

求最短路徑演算法有哪幾種?

4樓:冰冷的岩漿

dijkstra演算法

抄,a*演算法和d*演算法

dijkstra演算法是典型最短路演算法,用於計算一個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。

dijkstra演算法是很有代表性的最短路演算法,在很多專業課程中都作為基本內容有詳細的介紹,如資料結構,圖論,運籌學等等。

dijkstra一般的表述通常有兩種方式,一種用永久和臨時標號方式,一種是用open, close表方式,drew為了和下面要介紹的 a* 演算法和 d* 演算法表述一致,這裡均採用open,close表的方式

5樓:匿名使用者

請問這個是什麼語言啊

求最短路徑???

php啊?具體點

語言,編寫要求

6樓:豔鼠逗白貓

flord,dijkstra,spfa這些都是常用的。。。

最短路徑演算法 20

7樓:牛得天下

dijkstra演算法,a*演算法和d*演算法

8樓:匿名使用者

給個圖 我好演示

管理中常見的PDCA是什麼意思,管理中常見的PDCA是什麼意思?

雨說情感 pdca是由英語單詞plan 計劃 do 執行 check 檢查 和act 修正 的第一個字母組成的,pdca是按照這樣的順序進行質量管理的迴圈。pdca迴圈也指休哈特 shewhart 迴圈或戴明環。pdca迴圈最早是由waltershewhart在1942年提出,之後在20世紀50年代...

裝修中常見的問題有哪些,裝修過程中常見問題都有哪些

夏候彬華 這要分自己裝還是包給裝修公司。1 自己找工人裝 自己比較辛苦,以後出現問題不好找責任人,材料都要自己親自轉市場作比較,要經常到工地監督,以免工人浪費材料,如果你找的都是散工就更麻煩了,時不時跟你要點伙食費什麼的.2 包給裝修公司 自己比較輕鬆,相對也比較有保障,但要付出鈔票。裝修公司一般都...

生活中常見的食品化學現象

小李談心 甜味劑甜味兒是普遍受人們歡迎的一種基本味感,自然想到糖類,最具有代表性的天然甜味兒物質,除了糖及其衍生物外,還有許多非糖的天然化合物,天然化合物的衍生物和合成化合物都具有甜味兒,有些已成為正在使用的或潛在的甜味兒劑。甜度 表示甜味兒高低的指標 一般來講,濃度越大,甜度越高,多數糖的甜度隨著...