Download presentation
Presentation is loading. Please wait.
1
最短路徑演算法 卓訓榮 2002/11/11 Data base Label Setting Algorithm Label Correcting Algorithm 運輸資訊
2
Data Base
3
123 456 6 2 3 3 15 2 2 1 3 FromToDistance 126 143 152 232 252 261 363 451 523 565 需 30 儲存格
4
123 456 6 2 3 3 15 2 2 1 3 需 25 儲存格 ToDistance 26 43 52 32 52 61 63 51 23 65 (1)Point 1 (2)Point 4 (3)Point 7 (4)Point 8 (5)Point 9 Forward star
5
Label Setting Algorithm
6
Dijkstra’s Shortest-Path Algorithm (Label Setting Algorithm ) 已知路網中有 K 個點, 假設其中兩點分別為 s & t, 欲求 s 到 t 的最短路徑 Step1 設一變數 d(x) 代表 s 點到 x 點的距離 (x 代表路網中任一點 ) when 定義 y=s
7
Step2 設 a(y,x) 代表 y 到 x 點的距離, 當 y 點沒有節線 到達 x 點時, a(y,x)= 無限大 Ex: a(s,x)=a(x,t)=10, a(s,t)=a(x,s)=a(t,x)= 無限大 – 取 d(x) 中最小的一個的 x ( 非 s 且不曾為 y) 為 y Ex: d(s)=0, d(a)=5, d(b)=7, d(c)=6, y=a t x s 10
8
Step3 當 y=t 時, 即找到 s 到 t 的最短路徑 否則重新執行 Step2
9
紀錄路徑 在撰寫程式時, 為方便知道路徑經過哪些點, 建 議設一變數 P(x) 代表通過 x 點是經過 P(x) 點到 達的 Ex P(a)=s, P(b)=a, P(t)=b s a b t
10
例子 已知一路網 s 1 2 34 t 4 3 3 7 3 2 2 2
11
s 1 2 3 4 t d(s)=0 d(1)=∞ d(2)=∞ d(3)=∞ d(4)=∞ d(t)=∞ y=s 4 7 3
12
s 1 2 3 4 t d(s)=0 d(1)=min{d(1), d(s) + a(s,1)}=min{∞,0+4}=4 d(2)=min{d(2), d(s) + a(s,2)}=min{∞,0+7}=7 d(3)=min{d(3), d(s) + a(s,3)}=min{∞,0+3}=3 d(4)=∞ d(t)=∞ y=3 4 7 3 3 S 到 3 最短距離為 3
13
s 1 2 3 4 t d(s)=0 d(1)=4 d(2)=7 d(3)=3( 已做過 y) d(4)=min{d(4), d(3) + a(3,4)}=min{∞,3+3}=6 d(t)=∞ y=1 4 7 3 3 3 S 到 1 最短距離為 4
14
s 1 2 3 4 t d(s)=0 d(1)=4( 已做過 y) d(2)=min{d(2), d(1) + a(1,2)}=min{7,4+3}=7 d(3)=3( 已做過 y) d(4)=6 d(t)=∞ y=4 4 7 3 3 3 2 S 到 4 最短距離為 6
15
s 1 2 3 4 t d(s)=0 d(1)=4( 已做過 y) d(2)=7 d(3)=3( 已做過 y) d(4)=6( 已做過 y) d(t) =min{d(t), d(4) + a(4,t)}=min{∞,6+2}=8 y=2 4 7 3 3 3 2 2 S 到 2 最短距離為 7
16
s 1 2 3 4 t d(s)=0 d(1)=4( 已做過 y) d(2)=7( 已做過 y) d(3)=3( 已做過 y) d(4)=6( 已做過 y) d(t) =min{d(t), d(2) + a(2,t)}=min{8,7+2}=8 y=8 4 7 3 3 3 2 2 S 到 t 最短距離為 8
17
Label Correcting Algorithm
18
Label Correcting Algorithm Ford(1946), Moore(1957), Bellman(1958) 已知一路網有 n 點, 起點 s : 從起點 s 經 k 階到達 x 的距離 : 在 k 階時, 的集合 : 從起點開始, 恰 k 階到達的點 ( 終點 ) 集合 :k 階時, 所有點的前置點集合 :S 集合內所有點的下游點的集合 何為 “ 階 ”: 一階二階 三階
19
K* 該點的 K* 表示在進行到某階時, 起點到 該點的最短路徑中, 該點的上一點為何 Ex 1 2 3 上圖為 node 1 到 node 3 的最短路 徑, 則 node 3 的 K* 為 2
20
Algorithm 起始條件 k=0, d(s)=0, when S={s}, k=k+1, go to Step1
21
Step1 - 更新與 S 集合內所有點相鄰的點之 d(x) -d(x)=min{d(x),d(s)+a(s,x)} Step2 -S={ j | d(j) 在 step1 更新過 } -T(j)=S 集合內為 j 點的上游點 Step3 when k<=(n-1) &, k=k+1, go to Step1 when k<=(n-1) &, Stop when k=n &, Stop
22
例題 1 2 3 4 1 1 1 4
23
kjT(j)d(x) k* update Distanc LabelS 0d(1)=0L={0,∞, ∞, ∞}{1} 1{2,4}2{1} d(2)=min{ ∞,0+1}=1 1Y 4{1} d(4)=min{ ∞,0+4}=4 1YL={0,1, ∞,4} {2,4} P={0,1,0,1} 2{3}3{2} d(3)=min{ ∞,1+1}=2 2YL={0,1,2,4}{3} P={0,1,2,1} 3{4}4{3} d(4)=min{ 4,2+1}=3 3YL={0,1,2,3}{4} P={0,1,2,3}
24
習題 1. 用 forward star 的形式建立此路網的 data base 2. 用 label setting 與 label correcting Algorithm 求解點 1 到各點的最短路徑 1 2 3 4 5 7 6 10 9 8 3 1 9 7 4 3 6 5 7 8 2 3 5 5 9 6 7 4
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.