暴力搜索
枚举所有可能的结果进行搜索,地毯式搜索。
广度优先BFS
1.构造由根组成的队列Q
2.如果Q的第一个元素是目标节点,那么就停止搜索
3.从Q中删除元素x,并把x的所以子节点加入到队列的末尾
4.如果Q为空,则失败;否则返回2
深度优先DFS
1.构造一个由根组成的栈S
2.如果栈顶元素是目标节点,就停止搜索
3.弹出栈顶元素,并把栈顶元素的所有子节点加入栈顶
4.如果S为空,失败;否则返回2
搜索的优化
爬山法:
1.构造由根组成的栈S
2.如果栈顶元素是目标节点,就停止搜索
3.弹出栈顶元素
4.栈顶元素的子节点按照启发测度由大到小的顺序压入栈S
5.如果栈为空,失败;否则返回2
爬山法具有局部优化解的观念
Best-First搜索算法:
1.使用评价函数构造一个堆H,首先构造由根组成的堆
2.如果对顶元素为目标节点,就停止搜索
3.从H中删除堆顶元素r,并把r的子节点插入H
4.如果堆为空,失败;否则 返回2
分支界限:
产生分支的机制(使用前面的任意一种策略)
产生一个界限(可以通过发现可能解)
进行分支界限搜索,即剪除不可能产生优化解的分支
分支界限能够产生最优解