当前位置:   article > 正文

深度优先搜索(DFS)优化手册_深度优化搜索

深度优化搜索

前言

在上一篇博客中我们详细介绍了深度优先搜索(DFS)详解,但相信大在刷搜索题的时候,都会遇到一个问题,那就是DFS的运行时间太长了,很容易就会TLE,这时候如果想不到更好的算法,那就应该考虑优化,今天这篇文章我们就来仔细聊聊如何优化深搜,使深搜更高效的寻找答案。

技巧一.剪枝

1.基本定义


在通过搜索解决实际问题的过程中,我们是通过穷举每种情况来寻找合法解,然而在一些情况比较复杂的题目、数据量较强的题目中,由于算法的时间复杂度较高、数据规模过大,从而会导致运行超时甚至程序卡死,因此在对复杂问题的答案进行搜索时,我们应该灵活的针对每种题型设计对应的搜索规则并进行优化,通常通过设置剪枝、排除无效情况、对问题进行适当的转化等手法对搜索算法进行优化,使算法高效的执行并得出我们想要的结果。

对算法的剪枝与优化堪称是爆搜算法的精髓,如何合理的设置剪枝优化直接关系能否得到结果,这对我们的解题思维是一个很大的挑战,本板块将对常见的剪枝优化思路、对细节的处理进行归纳总结。

2.剪枝的原则

(1).正确性

剪枝优化的过程是使算法逼近最优解的过程,而不是使算法远离最优解甚至跳过最优解的过程。剪枝的前提是保证对最优解不丢不漏。

(2).准确性

在保证正确性的前提下,我们采取必要的手段使算法跳过一定不含有目标状态/最优解的分支,从而保证算法高效地进行并更迅速的找出

(3).高效性

设计优化程序的根本目的,是要减少搜索的次数,使程序运行的时间减少. 但为了使搜索次数尽可能的减少,我们又必须花工夫设计出一个准确性较高的优化算法,而当算法的准确性升高,其判断的次数必定增多,从而又导致耗时的增多,这便引出了矛盾. 因此,如何在优化与效率之间寻找一个平衡点,使得程序的时间复杂度尽可能降低,同样是非常重要的。

3.

(1).可行性剪枝:

如果可以判断以当前状态进行扩展,无论如何都达不到目标状态,此时应立即回溯。

(2).最优性剪枝:

如果之前的搜索路径到达当前状态时,记录的值比当前值更优,说明当前搜索路径不能产生更优的结果,应立即回溯,否则更新答案。

(3).优化搜索顺序:

在一些题目中,可以通过对子问题分支进行分析,先解决相对简单的子问题从而使尚未解决的子问题得到简化,通过对搜索顺序的优化可以实现这一点。

(4).排除冗余信息:

对限制条件进行分析,不要额外添加没有意义的搜索规则

技巧二.记忆化搜索

在搜索的时候,某些状态会被重复计算,导致了时间的浪费,此时可以把已经计算过的用数组存下来,下一次搜索时,便可以直接返回值,无需再次搜索,这种用空间换时间的优化方法,叫做记忆化搜索。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/859369
推荐阅读
相关标签
  

闽ICP备14008679号