Tree Search(樹狀搜尋)

一、什麼是 Tree Search(樹狀搜尋)?

在人工智慧(AI)與演算法中,許多問題都可以表示成一棵樹(圖一):

        起點(A)
/ | \
B C D
/|\ | / \
E F G H I J

每個節點(Node)代表一種狀態(State)。

例如:

  • 迷宮中的位置
  • 棋局的盤面
  • 路徑規劃中的城市
  • 遊戲中的決策

搜尋演算法的目的:

從起點找到目標節點(Goal Node)


二、Breadth First Search (BFS)

核心思想

先搜尋離起點最近的節點。

一層一層往外擴展。

Level 0: A

Level 1: B C D

Level 2: E F G H I J

搜尋順序:

A
B C D
E F G H I J

圖一結果:

A → B → C → D → E → F → G → H → I → J



使用資料結構

Queue(佇列)

FIFO:

First In First Out
先進先出

例如:

Queue:

A

取出A
加入B,C,D

Queue:
B,C,D

BFS特性

優點

如果邊權重相同:

BFS一定找到最短路徑。

缺點

需要大量記憶體。

假設每個節點有10個子節點:

深度5:

10^5 = 100000

需要保存很多節點。


時間複雜度

O(V + E)

V = Vertex(節點數)

E = Edge(邊數)


三、Depth First Search (DFS)

核心思想

一路往下走到底。

不能走才回頭。

A
|
B
|
E

然後:

A
|
B
|
F

搜尋順序

圖一結果:

A
B
E
F
G
C
H
D
I
J


使用資料結構

Stack(堆疊)

LIFO

Last In First Out
後進先出

例如:

push(B)
push(C)
push(D)

pop()
=> D

DFS特性

優點

記憶體需求小。

只需保存:

目前路徑

即可。


缺點

可能找到很差的解。

例如:

A
├── Goal
└── 巨大子樹

DFS可能先跑完整個巨大子樹。


時間複雜度

O(V+E)


四、Best-First Search

為什麼需要它?

BFS和DFS都很「盲目」。

不知道哪條路比較接近目標。

因此加入:

Heuristic
啟發函數

Heuristic h(n)

代表:

目前節點到目標的預估距離

例如:

Nodeh(n)
B1
C6
D3

表示:

B 最有希望
D 次之
C 最差

選擇方式

每次選:

h(n) 最小

的節點。


例子

Open:
B(1)
C(6)
D(3)

選:

B

因為:

1 最小

搜尋順序

圖一結果:

A
B
E
F
G
D
I
J


優點

搜尋速度快。


缺點

可能不是最佳解。

因為:

只看 h(n)

不看已經花費的成本。


五、A* Search

A* 是人工智慧最重要的搜尋演算法之一。

例如:

  • Google Maps
  • 遊戲尋路
  • 機器人導航

都可能使用A*或其變種。


A* 的核心公式

f(n) = g(n) + h(n)

g(n)

已經走過的成本

例如:

A → D

成本=4

則:

g(D)=4

h(n)

預估剩餘成本

例如:

D → Goal

估計=3

則:

h(D)=3

f(n)

總評分:

f(n)=g(n)+h(n)

例如:

D

g=4
h=3

f=7

範例

圖一中的計算:

B:
f=5+1=6

C:
f=2+6=8

D:
f=4+3=7

因此選:

B


搜尋順序

A
B
D
J


為何A*這麼強?

Best-First:

只看 h(n)

A*:

看 g(n)+h(n)

因此兼顧:

  • 已花費成本
  • 未來預估成本

A*最佳性條件

若:

h(n)
永遠不高估真實距離

(admissible heuristic)

則:

A*
一定找到最佳解


六、四種演算法比較

項目BFSDFSBest-FirstA*
使用結構QueueStackPriority QueuePriority Queue
考慮成本h(n)g(n)+h(n)
最短路徑是(無權圖)不一定是(條件成立)
記憶體中~高
搜尋速度快/慢不一定很快
AI應用非常多

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

If you like this post, please click the ads on the blog or buy me a coffee. Thank you very much.

留言

這個網誌中的熱門文章