最短路徑演算法 卓訓榮 2002/11/11 data base label setting algorithm label correcting...
Post on 20-Dec-2015
237 views
TRANSCRIPT
最短路徑演算法卓訓榮 2002/11/11
Data base
Label Setting Algorithm
Label Correcting Algorithm
運輸資訊
Data Base
1 2 3
4 5 6
6
23 3
1 5
2
2 1 3
From To Distance
1 2 6
1 4 3
1 5 2
2 3 2
2 5 2
2 6 1
3 6 3
4 5 1
5 2 3
5 6 5
需 30 儲存格
1 2 3
4 5 6
6
23 3
1 5
2
2 1 3
需 25 儲存格
To Distance
2 6
4 3
5 2
3 2
5 2
6 1
6 3
5 1
2 3
6 5
(1)Point 1
(2)Point 4
(3)Point 7
(4)Point 8
(5)Point 9
Forward star
Label Setting Algorithm
Dijkstra’s Shortest-Path Algorithm(Label Setting Algorithm )
• 已知路網中有 K 個點 , 假設其中兩點分別為 s & t, 欲求 s 到 t 的最短路徑
• Step1
設一變數 d(x) 代表 s 點到 x 點的距離 (x 代表路網中任一點 )
when
when
定義 y=s
)(xd sx 0)( xd sx
• 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
)},()(),(min{)( xyaydxdxd
txs 10 10
• Step3
當 y=t 時 , 即找到 s 到 t 的最短路徑否則重新執行 Step2
紀錄路徑• 在撰寫程式時 , 為方便知道路徑經過哪些點 ,
建議設一變數 P(x) 代表通過 x 點是經過 P(x)點到達的
• Ex
P(a)=s , P(b)=a , P(t)=b
s
a
bt
例子• 已知一路網
s
1 2
3 4
t
4
3
3
7
3
2
2
2
s
1 2
3 4
t
d(s)=0
d(1)=∞
d(2)=∞
d(3)=∞
d(4)=∞
d(t)=∞
y=s
4
7
3
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 3S 到 3 最短距離為3
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
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
2S 到 4 最短距離為6
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
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
Label Correcting Algorithm
Label Correcting AlgorithmFord(1946) , Moore(1957) , Bellman(1958)
• 已知一路網有 n 點 , 起點 s
: 從起點 s 經 k 階到達 x 的距離 : 在 k 階時 , 的集合 : 從起點開始 , 恰 k 階到達的點 ( 終點 )
集合 :k 階時 , 所有點的前置點集合 :S 集合內所有點的下游點的集合
)(xd k
)(xd kkLkSkP
何為“階” :
一階 二階 三階
)(S
K*
• 該點的 K* 表示在進行到某階時 , 起點到該點的最短路徑中 , 該點的上一點為何
• Ex
12
3
上圖為 node 1 到 node 3 的最短路徑 , 則 node 3 的 K* 為 2
Algorithm
• 起始條件k=0 , d(s)=0 , when
S={s} , k=k+1 , go to Step1
)(xd sx
• 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
SS
S
例題
1
2 3
4
1
1
1
4
k jT(j)
d(x) k* update Distanc Label S
0 d(1)=0L={0,∞, ∞, ∞}
{1}
1{2,4}
2{1}
d(2)=min{∞,0+1}=1 1 Y
4{1}
d(4)=min{∞,0+4}=4 1 Y L={0,1, ∞,4}
{2,4}
P={0,1,0,1}
2 {3} 3{2}
d(3)=min{∞,1+1}=2 2 Y L={0,1,2,4}
{3}
P={0,1,2,1}
3 {4} 4{3}
d(4)=min{4,2+1}=3 3 Y L={0,1,2,3}
{4}
P={0,1,2,3}
)(S
習題1. 用 forward star 的形式建立此路網的 data base
2. 用 label setting 與 label correcting Algorithm
求解點 1 到各點的最短路徑
1 2
34
5
76
10
9
8
3
19
7
43
65
78
2 35
5
9 6
7
4