搜索方法中的剪枝优化

来源:互联网 发布:js修改button的文字 编辑:程序博客网 时间:2024/06/17 05:30

剪枝的原则

正确性:我们就应当利用“必要条件”来进行剪枝判断。也就是说,通过解所必须具备的特征、必须满足的条件等方面来考察待判断的枝条能否被剪枝
准确性
高效性:考虑剪枝的时间开销。如果剪枝判断的时间消耗过多,就有可能减小、甚至完全抵消提高判断准确性所能带来的优化效果

剪枝的类别

  1. 可行性剪枝。
  2. 最优性剪枝(上下界剪枝)。

可行性剪枝

对于一条合法的路径,除出发点和目标格子外,每一个中间格子都必然有“一进一出”的过程。所以在搜索过程中,必须保证每个尚未经过的格子都与至少两个尚未经过的格子相邻

最优性剪枝

①在搜索开始之前,我们可以使用某种高效方法(如贪心法等)求出一个较优解,作为初始下界,经常可以剪去大量明显不可能的枝条。
②在广度优先搜索中,也是可以使用最优性剪枝的,也就是我们常说的分枝定界方法。

总结

剪枝方法无论多么巧妙,都不能从本质上降低搜索算法的时间复杂度,这是不争的事实。因此,我们在动手设计一个搜索算法之前,不妨先考虑一下是否存在着更为有效的方法。
还有一个编程复杂度的问题。我们对一个搜索算法使用了很多优化技巧,虽然可能使程序的时间效率得到一定的提高,但却往往要消耗大量的编程时间,很容易造成“拣了芝麻,丢了西瓜”的结果。

具体问题具体分析

原创粉丝点击