搜索算法
搜索算法是利用计算机的高性能来有目的的穷举一个问题解空间的部分或所有的可能情况,从而求出问题的解的一种方法。(百度百科)
搜索算法需要在指数量级的繁杂的可选对象中搜索某个具有特定性质的解,而且,求解这些问题似乎没有什么捷径可行。(《算法概论》)
现阶段,搜索算法实际上是根据初始条件和扩展规则构造一棵“解答树”并寻找符合目标状态的节点的过程。为什么会选择树这一结构呢?The procedure of solving many problems may be represented by trees, therefore the solving of these problems becomes a tree searching problem.
搜索算法最重要的两点?
Problem space / State space (the set of all possible solutions )
Tree Searching Strategies
在构造“解答树”中则有四个问题?
How to organize the candidate solution space?
How to traverse the candidate solution space?
Techniques of pruning the search?
Analysis of searching algorithm?
来看主要的几个树的搜索算法~
目录
Branch-and-bound Searching Algorithm
Breadth - First Search
1)构造一个顶点元素类型的队列,初始状态时其内的元素只有根节点;
2)将队列中的队首元素与目标元素比较,如果是,停止寻找;否则,继续执行程序;
3)将队首元素的后继节点依次加入队列中,移除队列中的队首元素;
4)如果队列为空,查找失败;否则,转向第二步。
Depth - First Search
1)构造一个顶点元素类型的栈,初始状态时其内的元素只有根节点;
2)将栈中的栈顶元素与目标元素比较,如果是,停止寻找;否则,继续执行程序;
3)移除栈顶元素,并将栈顶元素的后继节点依次加入栈中,;
4)如果栈为空,查找失败;否则,转向第二步。