1. 引入
在算法设计中,一般可以通过构造树并对其搜索来求解,例如布尔表达式可满足性问题、Hamiltonian环问题等。本文首先介绍基本的树搜索策略:广度优先搜索、深度优先搜索;接着介绍优化后的树搜索策略:爬山法、Best-First法、分支限界法;最后介绍A*算法。
2. 基本树搜索策略
2.1 广度优先策略
算法的基本思想:
1 构造一个由根节点构成的队列Q
2 if Q 的第一个元素X是目标节点 Then 停止
3 把X的孩子节点依次入队,并删除X元素
4 if Q 为空 Then 无解 Else goto 第二步
2.2 深度优先策略
算法的基本思想:
1 构造一个由根节点构成的栈S
2 if Top(S) 是目标节点 Then 停止
3 Pop(s) , 把X的孩子节点依次入栈
4 if S 为空 Then 无解 Else goto 第二步
3. 优化的树搜索策略
3.1 爬山法
算法思想:在深度优先搜索过程中, 我们经常遇到多个节点可以扩展的情况, 首先扩展哪个? 爬山策略使用贪心方法确定搜索的方向 , 是优化的深度优先搜索策略, 爬山策略使用启发式测度来排序节点扩展的顺序。算法步骤如下:
1 构造一个由根节点构成的栈S
2 if Top(S) 是目标节点 Then 停止
3 Pop(s) , 把X的孩子节点按照从大到小的顺序依次入栈
4 if S 为空 Then 无解 Else goto 第二步
3.2 Best-First
算法思想:爬山法只具有局部优化的观念,而最佳优先策略具有全局优化的观念。最佳搜索策略结合深度搜索和广度搜索的优点,根据一个评价函数,在目前产生的所有节点中选择具有最小评价函数值的节点来进一步扩展。算法步骤如下:
1 根据某个评价函数构造堆H, 首先根据根节点构造单元素堆
2 if H的根元素r 是目标节点 Then 停止
3 删除r, 把r的孩子节点加入堆H
4 if H 为空 Then 无解 Else goto 第二步
算法思想:分支限界法通过发现优化解的一个界限来缩小解空间,从而提高求解效率。分支限界法可采用以上任一方式产生分支,然后通过发现可能解来确定一个界限,最后通过分支限界完成搜索,即剪除不可能产生优化解的分支(无解或者不是最优解)。