【最短路徑問題】
下圖給出了一張地圖,地圖中每個頂點代表乙個城市,兩個城市間的連線代表道路,連線上的數值代表道路長度,求從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。...