code

2017年1月29日 星期日

AI 筆記6 - Un-informed Search: BFS

定義

對於problem沒有domain knowledge的search方法。
可能有以下幾種search strategy(也就是explore node的順序):

不過先定義什麼叫explored:
1. goal-test
2. expand children nodes into fringe

BFS (先expand深度最淺者)

下圖中灰色代表放入fringe, 黃色代表被explored,黑色代表此subtree fails(不會再被expand)。


演算法如下:


可以看到其實跟general search的演算法幾乎一樣,差別只在於BFS單純用FIFO queue就可以達成。


分析BFS performance

complete: 如果branching factor(最大children node數目)是有限的,search space就是有限的,我們終究可以找到solution。

time: 可以定義成expanded node的數目,假設我們solution在depth = d的時候被expand,則我們總共expand了:

因為depth = 0有1個node (initial node),depth = 1有b個nodes, depth = 2 有b^2 nodes,這個多項式是O(b^d)。



space: 看起來跟time complexity的需求一樣。

optimal: 意思是我們的演算法找到的goal是否是cost最低的?是的,BFS因為找最淺的node,所以如果每次step cost相同的時候,我們保證找到optimal solution


BFS 是exponential time/space complexity,只有在某些特定的application才適合使用(solution會在很淺的node被找到):




沒有留言:

張貼留言