[知识点] 3.3 搜索优化

Posted jinkun113

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[知识点] 3.3 搜索优化相关的知识,希望对你有一定的参考价值。

总目录 > 3 搜索 > 3.3 搜索优化

前言

 

子目录列表

1、

 

3.2 五种改进搜索算法

1、为什么需要优化

在最开始我们就提到,搜索算法适用性很广,在不清楚正确算法,没有思路,或者时间紧迫的情况下,大部分题目都可以进行“暴力搜索”。当然,比起正确的算法,搜索的效率是低下的,OI 赛制中得分往往不会超过 30 分,ICPC 赛制中往往是不可取的。但搜索真的就卑微地拘泥于捡漏吗?也不然。搜索的普适性,同时反映出其过程是无脑而有冗余的,我们可以对其进行一些优化,使其效率提高。

2、剪枝

搜索优化和 3.2 五种改进搜索算法 中提及的改进搜索算法是有区别的。改进的搜索算法本质上是不同的算法,和普通的 DFS / BFS 相比框架已经发生较大的改变;而搜索优化是在原有框架进行的,一般是直接在原搜索代码中增加一些 break 或 continue 型的语句,以跳过一些必然不会得到答案的情况,这种操作俗称为“剪枝”。

剪枝,很好理解的一个词。路边种下的树木随着年轮的生长枝叶逐渐繁多,园林工人会对其一些枝叶进行修剪,或为了调整生长方向使其端庄而立,或为了减少结果量使其果实质量提升,总而言之是通过外力对树木生长的一种“优化”。不剪枝,树木同样能够长大,但随着生长可能出现诸多不够理想的情况;不剪枝,搜索同样能够得到结果,但受到效率低下的影响,得分可能也会不够理想。

那么对于搜索的剪枝有些什么具体的方式呢?一般我们将其分为三种 —— 记忆化搜索,最优性剪枝,可行性剪枝。下面一一进行分析。

 

3、记忆化搜索

大致思路:搜索过程中出现曾经出现过的状态,并且到达该状态之后的搜索过程与到达该状态前的搜索过程无关,即无后效性,可以直接停止搜索,回溯。通过一个记录数组来记录这个状态是否出现,以规避多次计算相同状态而做无用功。

具体请参见 4.1 动态规划基础 / 记忆化搜索

 

4、最优性剪枝

大致思路:搜索过程中当前的解比之前得到的解更差时,可以直接停止搜索并回溯。直接在递归时判断一下当前值与当前最优解的大小关系即可。

 

5、可行性剪枝

大致思路:搜索过程中当前得到的解已经不满足题目要求,可以直接停止搜索并回溯。直接在递归时判断一下当前值与条件范围内下限值即可。

这一类剪枝可以联系迭代加深 DFS 来理解。对于迭代加深 DFS,每次限制搜索深度,相当于每次调整下限值,当前深度超过限制深度即返回,也算是一种可行性剪枝。

以上是关于[知识点] 3.3 搜索优化的主要内容,如果未能解决你的问题,请参考以下文章

SEO培训:搜索引擎优化的基础知识!

5.terms搜索多个值以及多值搜索结果优化

如何做好企业网站搜索引擎优化?网站排名怎么做上首页?

大咖带你玩转企业SEO搜索引擎优化视频

XGBoost模型调参:GridSearchCV方法网格搜索优化参数

SEO基础知识之过度优化的六大现象