動態規劃最短路徑問題

2021-06-07 19:03:25 字數 1012 閱讀 4202

【最短路徑問題】

下圖給出了一張地圖,地圖中每個頂點代表乙個城市,兩個城市間的連線代表道路,連線上的數值代表道路長度,求從a地到e地的最短路徑。

【分析】本題可以利用深度搜尋法求解,偽**如下:

vars:未訪問的城市集合;

dist[i,j]:儲存任意兩個城市間的距離陣列;

function search(city):integer; 

begin

if city=e then search←0;

else begin

min:=maxint;

for i取遍所有城市 do

if dist[city,i]>0 and (i∈s)

then begin

s←s-[i];

j←dist[city,i]+search(i); 

s←s+[i];

if j

【效率評價】採用深度搜尋的時間複雜度是w(n!),效率很低。主要的原因就在於重複計算了很多路徑值。如果把每次計算得到的最短距離儲存下來就可以節省很多時間,於是產生了動態規劃的思路。

【動態規劃】從城市a出發,按照與城市a的路徑長度劃分階段。

階段0包含的出發城市有

階段1包含的城市有

階段2包含的城市有

階段3包含的城市有

階段4包含的城市有

這種劃分的性質如下:

(1)階段i 的取值只與階段 i+1 有關,階段 i+1 的取值對階段 i 的取值產生影響;

(2)每個階段的順序是確定的,不可以調換任兩個階段的順序。

從階段4的城市e出發,按照階段的順序倒推至階段0的城市a,得到如下演算法:

map[i,j]←兩個城市之間的距離陣列

dist[e]←0;

for k←3 downto 0 do

for x 取遍k階段的所有城市 do

begin

dist[x]←∞;

for y取遍k+1階段的所有城市 do

if dist[y]+map[x,y]

動態規劃實現最短路徑問題

一 設計最短路徑的動態規劃演算法 演算法導論 中一般將設計動態規劃演算法歸納為下面幾個步驟 1 分析最優解的結構 2 遞迴定義最優解的值 3 自底向上計算最優解的值 4 從計算的最優解的值上面構建出最優解 二 最短路徑的結構 從最優解的結構開始分析 我們假設沒有權值為負的路徑 對於圖g的所有結點對最...

動態規劃 最短路徑跳箱子問題

求從第乙個箱子跳到最後乙個箱子最短需要多少步 輸入乙個陣列 如 1,3,0,1,5 表示第乙個箱子能最多往右跳1步 第二個最多往右跳3步 若不能跳到最後乙個箱子輸出 1 若開始就在最後乙個箱子輸出0 假設輸入的陣列 為長度為n的 nums n 如 1,3,0,1,5 首先設定乙個陣列every pa...

動態規劃 最短路徑 Floyd演算法

正如我們所知道的,floyd演算法用於求最短路徑。floyd演算法可以說是warshall演算法的擴充套件,三個for迴圈就可以解決問題,所以它的時間複雜度為o n 3 floyd演算法的基本思想如下 從任意節點a到任意節點b的最短路徑不外乎2種可能 1是直接從a到b 2是從a經過若干個節點x到b。...