搜索算法的剪枝优化

概要:众所周知,搜索算法分为深度优先搜索和广度优先搜索两种。深度优先算法就是一条道走到底,直到走到了死胡同就会回溯继续寻找下一条路径直到找到可行结果。广度优先搜索就是一层一层的进行扩展,在每一步可达的基础之上再进一步扩展,直到叶子节点一定会有结果值。但是,深搜的时间复杂度令人头疼,而广搜的空间复杂度也是令人望而生怯。于是就出现了剪枝这一种优化方法,因为我们在进行搜索时实际上形成了一棵搜索树,而剪枝就是将某些枝条进行减去,从而减少搜索路径,从而减少时间和空间复杂度。

剪枝优化的核心就是根据实际情况形成判断条件,根据判断条件剪枝

剪枝的原则:
(1)正确性
     必须保证不能丢失正确的解,这是前提。通过解答必须具备的特征,必须满足的条件来考察待判断的枝条能否被剪掉。
(2)准确性
     即能够尽可能多的剪去不能得到正确解的枝条。
(3)高效性
     设计好剪枝判断方法后,对每一根枝条都执行一次判断。要尽量减少剪枝判断的副作用

剪枝方法又分为二种:

①可行性剪枝

②最优性剪枝(上下界剪枝)

可行性剪枝

就是将搜索树里面不能走的或者走了会走到死胡同的枝条进行减去。

在很多情况下,并不是搜索树中的所有枝条都能通向我们需要的结果,很多的枝条实际上只是一些死胡同。如果我们能够在刚刚进入这样的死胡同的时候,就能够判断出来并立即剪枝,程序的效率往往会得到提高

最优性剪枝

一般要自己构造一个估值函数,由该估值函数计算上界和下界,最优性剪枝又是如何进行的呢?当我们处在搜索树的枝条上时,可以通过某种方法估算出该枝条上的所有解的评价函数的上界,即所谓估价函数。显然,大于当前保存的优度的下界,是该枝条上存在最优解的必要条件,否则就一定可以剪枝。所以,最优性剪枝也可以称为“上下界剪枝”。同时,我们也可以看到,最优性剪枝的核心问题就是估价函数的建立。

最后一句话送给大家:不一定采用搜索算法解决问题,有的时候非搜索算法往往是高效率的程序

后续有题我会补充上来

你可能感兴趣的:(搜索)