就算内心讨厌也要学会微笑^_^,这个世界不会在乎你的感受。

[Algorithm][Tree-Search][0]

1.Hill Climbing

不同于DFS或BFS,爬山法采用了启发式的搜索策略。通过使用评估函数,根据具体情况,扩展评估函数值大的或者小的进行扩展节点。

对于8-puzzle问题,f(n)表示节点n处误置个数。按f(n)大的先入栈,先扩展f(n)小的。每次扩展都是扩展当前,也即局部最小的节点。

与DFS最大的差别就是扩展规则,从DFS的按顺序扩展,变为按f(n)扩展,就这点差别。

 

2.Best-First Search

BestFS也是使用了评估函数f(n),但是它使用堆来记录所有节点的f(n),每次从所有的f(n)里选最小的,进行扩展。

从Hill Climbing的局部变到全局。

嗯,就这点差别。

 

3.A*

跟BestFS差不多,也是全局找,就是f(n)=g(n)+h*(n),又因为h*(n)不可知,又用了h(n)来估计。

 

4.Backtracing

通过有策略的DFS,来不去搜索那些根本不可能产生最优解的节点。

比如讲,当前可行解是10,你在搜索另一个分支的时候,还没结束就已经20了,显然没有必要继续搜索下去了。

通过约束函数,界函数来进行剪枝,减少不必要的搜索。

 

5.Branch Bound

分支限界是Backtracking的增强版。

通过上界、下界的共同作用,加快剪枝。

 

posted @ 2017-12-25 00:53  Syntax  阅读(192)  评论(0编辑  收藏  举报