Path Finding Algorithm
From the very beginning...
Graph theory (圖論)
Graph theory (圖論)
離散數學
Topology (拓撲學)
Set theory (集合論)
Mathematical logic
(數理邏輯)
...
Graph theory (圖論)
無向圖
有向圖
頂點: 事物
線: 事物間的關係
Graph theory (圖論)
柯尼斯堡七橋問題
A
B
C
D
A
B
C
D
在所有橋都只能走一遍的前提下,如何才能把這個地方所有的橋都走遍?
Graph theory (圖論)
A
B
C
D
在所有橋都只能走一遍的前提下,如何才能把這個地方所有的橋都走遍?
Ans: 不可能(一筆畫問題,萊昂哈德·歐拉在1736年提出)
對於一個給定的連通圖,如果存在超過兩個(不包括兩個)奇頂點,那麼滿足要求的路線便不存在了
Dijkstra Algorithm
Dijkstra Algorithm
- 荷蘭科學家艾茲赫爾·戴克斯特拉在1956年發現的演算法
- 用於找到兩個頂點之間的最短路徑
- 該演算法後來衍生出許多變體(後面會提到)
- 大多應用在尋路、交通上
- 無法處理負權邊
a
b
c
d
e
f
7
9
14
10
2
9
11
15
6
A
B
a | b | c | d | e | f | 新增 |
---|---|---|---|---|---|---|
∞ | ∞ | ∞ | ∞ | ∞ | ∞ | a |
a
b
c
d
e
f
7
9
14
10
2
9
11
15
6
A
B
a | b | c | d | e | f | 新增 |
---|---|---|---|---|---|---|
∞ | ∞ | ∞ | ∞ | ∞ | ∞ | a |
0 | 7 | 9 | 14 | ∞ | ∞ |
a
b
c
d
e
f
7
9
14
10
2
9
11
15
6
A
B
b | c | d | e | f | 新增 | |
---|---|---|---|---|---|---|
∞ | ∞ | ∞ | ∞ | ∞ | ∞ | a |
0 | 7 | 9 | 14 | ∞ | ∞ | b |
a
b
c
d
e
f
7
9
14
10
2
9
11
15
6
A
B
b | c | d | e | f | 新增 | |
---|---|---|---|---|---|---|
∞ | ∞ | ∞ | ∞ | ∞ | ∞ | a |
0 | 7 | 9 | 14 | ∞ | ∞ | b |
0 | 7 | 9 | 14 | ∞ | 22 |
a
b
c
d
e
f
7
9
14
10
2
9
11
15
6
A
B
c | d | e | f | 新增 | ||
---|---|---|---|---|---|---|
∞ | ∞ | ∞ | ∞ | ∞ | ∞ | a |
0 | 7 | 9 | 14 | ∞ | ∞ | b |
0 | 7 | 9 | 14 | ∞ | 22 | c |
a
b
c
d
e
f
7
9
14
10
2
9
11
15
6
A
B
c | d | e | f | 新增 | ||
---|---|---|---|---|---|---|
∞ | ∞ | ∞ | ∞ | ∞ | ∞ | a |
0 | 7 | 9 | 14 | ∞ | ∞ | b |
0 | 7 | 9 | 14 | ∞ | 22 | c |
0 | 7 | 9 | 11 | ∞ | 20 |
a
b
c
d
e
f
7
9
14
10
2
9
11
15
6
A
B
d | e | f | 新增 | |||
---|---|---|---|---|---|---|
∞ | ∞ | ∞ | ∞ | ∞ | ∞ | a |
0 | 7 | 9 | 14 | ∞ | ∞ | b |
0 | 7 | 9 | 14 | ∞ | 22 | c |
0 | 7 | 9 | 11 | ∞ | 20 | d |
a
b
c
d
e
f
7
9
14
10
2
9
11
15
6
A
B
d | e | f | 新增 | |||
---|---|---|---|---|---|---|
∞ | ∞ | ∞ | ∞ | ∞ | ∞ | a |
0 | 7 | 9 | 14 | ∞ | ∞ | b |
0 | 7 | 9 | 14 | ∞ | 22 | c |
0 | 7 | 9 | 11 | ∞ | 20 | d |
0 | 7 | 9 | 11 | 20 | 20 |
a
b
c
d
e
f
7
9
14
10
2
9
11
15
6
A
B
e | f | 新增 | ||||
---|---|---|---|---|---|---|
∞ | ∞ | ∞ | ∞ | ∞ | ∞ | a |
0 | 7 | 9 | 14 | ∞ | ∞ | b |
0 | 7 | 9 | 14 | ∞ | 22 | c |
0 | 7 | 9 | 11 | ∞ | 20 | d |
0 | 7 | 9 | 11 | 20 | 20 |
Ended ?
Yes! Because
a
b
c
d
e
f
7
9
14
10
2
9
11
15
-2
A
B
e | f | 新增 | ||||
---|---|---|---|---|---|---|
∞ | ∞ | ∞ | ∞ | ∞ | ∞ | a |
0 | 7 | 9 | 14 | ∞ | ∞ | b |
0 | 7 | 9 | 14 | ∞ | 22 | c |
0 | 7 | 9 | 11 | ∞ | 20 | d |
0 | 7 | 9 | 11 | 20 | 20 |
If f -> e is negative weight, then the result will be incorrect
- Bellman-Ford algorithm
- 可處理負權邊
- 可偵測負權環 (第n次後仍可降低cost,則中止)
- Floyd-Warshall algorithm
- 可處理負權邊,但不能有負權環
- A* search algorithm
- Dijkstra 改良版,多了評估函式
- 常應用於遊戲上(自動尋路)
Negative cycle
a
b
c
d
-1
1
-1
-1
A* search algorithm
a
b
c
d
e
f
7
9
14
10
2
9
11
15
6
A
B
a | b | c | d | e | f | 新增 |
---|---|---|---|---|---|---|
∞ | ∞ | ∞ | ∞ | ∞ | ∞ | a |
起點到頂點 n 的實際距離
頂點 n 到終點的估算距離
常見評估方式: 歐幾里得距離、曼哈頓距離、切比雪夫距離
20
13
25
9
4
A* search algorithm
a
b
c
d
e
f
7
9
14
10
2
9
11
15
6
A
B
a | b | c | d | e | f | 新增 |
---|---|---|---|---|---|---|
∞ | ∞ | ∞ | ∞ | ∞ | ∞ | a |
0 | 7 | 9 | 14 | ∞ | ∞ |
20
13
25
9
4
a | b | c | d | e | f |
---|---|---|---|---|---|
∞ | ∞ | ∞ | ∞ | ∞ | ∞ |
20 | 32 | 18 | 27 | ∞ | ∞ |
...
更多細節可看影片教學
Dijkstra
A star
由 Subh83 - 自己的作品, CC BY 3.0, https://commons.wikimedia.org/w/index.php?curid=14916903
由 Subh83 - 自己的作品, CC BY 3.0, https://commons.wikimedia.org/w/index.php?curid=14916867
References
Path Finding Algorithm
By Travor Lee
Path Finding Algorithm
- 162