搜索算法是利用计算机的高性能来有目的的穷举一个问题解空间的部分或所有的可能情况,从而求出问题的解的一种方法。现阶段一般有枚举算法、深度优先搜索、广度优先搜索、A*算法、回溯算法、蒙特卡洛树搜索、散列函数等算法。在大规模实验环境中,通常通过在搜索前,根据条件降低搜索规模;根据问题的约束条件进行剪枝;利用搜索过程中的中间解,避免重复计算这几种方法进行优化。
运算原理:
搜索算法实际上是根据初始条件和扩展规则构造的一棵“解答树”并寻找符合目标状态的节点过程。所有的搜索算法从最终的算法实现上来看,都可以划分成两个部分——控制结构(扩展节点的方式)和产生方式(扩展节点),而所有的算法优化和改进主要是通过修改器控制结构来完成的。其实,在这样的思考过程中,我们已不知不觉的将一个具体问题抽象成了一个图论模型——树,即搜索算法的使用第一步在于搜索树的建立。
搜索算法的优化:
利用回溯算法进行优化:回溯和深度优先相似(我理解的回溯和深度优先搜索的关系是回溯是深度优先搜索中的一个应用),不同之处在于对一个结点进行扩张的时候,并不将所有节点扩展出来,而只扩展其中 的一个。因而具有盲目性,但内存占用较少。
在搜索中的优化:1.在搜索前,根据条件降低搜索规模。2.广度优先搜索中,被处理过的节点,充分释放空间。3.根据问题的约束条件进行剪枝。
剪枝时应遵循的原则如下