最近写了一些题,对这三个概念稍微有点混淆,写点东西回忆一下。
二分法
二分法简介,将题目要求的量当做目标值,使用两个参数,从初始位置(往往是最小值之类的),从最终位置(往往是最大值),每次判断二者的平均值是不是满足题意,根据该判断更新或者的值。二分法的应用大概包括以下几部分:
- 最大化最小值
- 最大化平均值
- 查找第大的值
- 最小化第大的值
专栏有不少对应的题
尺取法
尺取法简介,尺取法是对数组保存一对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案。这对下标记为,与二分法不同的是,这里的都是从区间的一侧开始的,而不是从区间两侧,而且尺取法擅长处理区间相关的问题,比如
- 大于某阈值的最短连续序列和
- 小于某阈值的最长连续序列和
- 最接近某值的连续序列和
同样专栏有不少题
折半枚举
有时候,问题的规模较大,无法枚举所有元素的组合,但能够枚举一半元素的组合。此时,将问题拆成两半后分别枚举,再合并它们的结果这一方法往往非常有效。不同于前两种方法,折半枚举并不需要维护两个端点,它的精髓在于如何拆分,使得我们不用枚举所有的元素。
目前见到过最经典的应用无非是
我们无法枚举所有的的值,但是我们可以将拆分成,然后分别枚举两个部分进行判断。
折半枚举部分例题我放在二分法的专栏了。有兴趣可以solve
来源:CSDN
作者:csyifanZhang
链接:https://blog.csdn.net/csyifanZhang/article/details/104724980