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

a 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

a b c d e f 新增
a
0 7 9 14 b
0 7 9 14 22
7+10<9?

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 b
0 7 9 14 22 c

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 b
0 7 9 14 22 c
0 7 9 11 20
9+2<14 ?
9+11<22 ?

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 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

a b c 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

a b c 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

Ended ?

Yes! Because 

20(4) < 20(5)

a

b

c

d

e

f

7

9

14

10

2

9

11

15

-2

A

B

a b c 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

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
f(n) = g(n) + h(n)
g(n)
h(n)

起點到頂點 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
f(n)
g(n)

...

更多細節可看影片教學

A* (A Star) Search Algorithm

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