搜索算法优化

搜索算法优化利用回溯算法进行优化:回溯和深度优先相似,不同之处在于对一个节点扩展的时候,并不将所有的子节点扩展出来,而只扩展其中的一个

因而具有盲目性,但内存占用少

在搜索中的优化:1.在搜索前,根据条件降低搜索规模

2.广度优先搜索中,被处理过的节点,充分释放空间

3.给据问题的约束条件进行剪枝

在剪枝时应遵循以下原则:(1)正确性:剪去的“枝条”不包含最优答案;我们知道,剪枝方法之所以能够优化程序的执行效率,是因为它能够“剪去”搜索树中的一些“枝条”

然而,如果在剪枝的时候,将“长有”我们所需要的解的枝条也剪掉了,那么,一切优化也就都失去了意义

所以,对剪枝的第一个要求就是正确性,即必须保证不丢失正确的结果,这是剪枝优化的前提

为了满足这个原则,计算机应当利用“必要条件”来进行剪枝判断

也就是说,通过解所必须具备的特征、必须满足的条件等方面来考察待判断的枝条能否被剪枝

这样就可以保证所剪掉的枝条一定不是正解所在的枝条

当然,由必要条件的定义,没有被剪枝不意味着一定可以得到正解(否则,也就不必搜索了)

(2)准确性:在保证第一条原则的情况下,尽可能的剪去更多不包含最优答案的枝条;在保证了正确性的基础上,对剪枝判断的第二个要求就是准确性,即能够尽可能多的剪去不能通向正解的枝条

剪枝方法只有在具有了较高的准确性的时候,才能真正收到优化的效果

因此,准确性可以说是剪枝优化的生命

(3)高效性:通过剪枝要能够更快的接近到达最优解

一般说来,设计好剪枝判断方法之后,我们对搜索树的每个枝条都要执行一次判断操作

然而,由于是利用出解的“必要条件”进行判断,所以,必然有很多不含正解的枝条没有被剪枝

这些情况下的剪枝判断操作,对于程序的效率的提高无疑是具有副作用的

为了尽量减少剪枝判断的副作用,我们除了要下功夫改善判断的准确性外,经常还需要提高判断操作本身的时间效率

然而这就带来了一个矛盾:我们为了加强优化的效果,就必须提高剪枝判断的准确性,因此,常常不得不提高判断操作的复杂度,也就同时降低了剪枝判断的时间效率;但是,如果剪枝判断的时间消耗过多,就有可能减小、甚至完全抵消提高判断准确性所能带来的优化效果,这恐怕也是得不偿失

很多情况下,能否较好的解决这个矛盾,往往成为搜索算法优化的关键

 

以上内容由大学时代综合整理自互联网,实际情况请以官方资料为准。

相关