剪枝思想
一、剪枝策略的寻觅的方法
- 微观方法:从问题本身动身,发现剪枝条件
- 宏观方法:从整体动身,发现剪枝条件。
- 注意提高效力,这是关键,最重要的。
总之,剪枝策略,属于算法优化范畴;通常利用在DFS 和 BFS 搜索算法中;剪枝策略就是寻觅过滤条件,提早减少没必要要的搜索路径。
二、剪枝算法(算法优化)
1、简介
在搜索算法中优化中,剪枝,就是通过某种判断,避免一些没必要要的遍历进程,形象的说,就是剪去了搜索树中的某些“枝条”,故称剪枝。利用剪枝优化的核心问题是设计剪枝判断方法,即肯定哪些枝条应当舍弃,哪些枝条应当保存的方法。
2、剪枝优化三大原则: 正确、准确、高效
搜索算法,绝大部份需要用到剪枝。但是,不是所有的枝条都可以剪掉,这就需要通过设计出公道的判断方法,以决定某1分支的取舍。在设计判断方法的时候,需要遵守一定的原则。
1) 正确性
正如上文所述,枝条不是爱剪就可以剪的。如果随意剪枝,把带有最优解的那一分支也剪掉了的话,剪枝也就失去了意义。所以,剪枝的条件是一定要保证不丢失正确的结果。
2)准确性
在保证了正确性的基础上,我们应当根据具体问题具体分析,采取适合的判断手段,使不包括最优解的枝条尽量多的被剪去,以到达程序“最优化”的目的,可以说,剪枝的准确性,是衡量一个优化算法好坏的标准。
3)高效性
设计优化程序的根本目的,是要减少搜索的次数,使程序运行的时间减少。 但为了使搜索次数尽量的减少,我们又必须花工夫设计出1个准确性较高的优化算法,而当算法的准确性升高,其判断的次数一定增多,从而又致使耗时的增多,这便引出了矛盾。
因此,如何在优化与效力之间寻觅一个平衡点,使得程序的时间复杂度尽量下降,一样是非常重要的。倘若一个剪枝的判断效果非常好,但是它却需要耗费大量的时间来判断、比较,结果全部程序运行起来也跟没有优化过的没甚么区分,这样就太得不偿失了。
三、分类
剪枝算法依照其判断思路可大致分成两类:可行性剪枝及最优性剪枝。
1 可行性剪枝
该方法判断继续搜索能否得出答案,如果不能直接回溯。
2 最优性剪枝
最优性剪枝,又称为上下界剪枝,是一种重要的搜索剪枝策略。它记录当前得到的最优值,如果当前结点已没法产生比当前最优解更优的解时,可以提早回溯。