二分法,尺取法,折半枚举,你们到底是什么?

随声附和 提交于 2020-03-08 10:18:03

最近写了一些题,对这三个概念稍微有点混淆,写点东西回忆一下。

二分法

二分法简介,将题目要求的量当做目标值,使用两个参数l,rl,rll从初始位置(往往是最小值之类的),rr从最终位置(往往是最大值),每次判断二者的平均值mid=(l+r)>>2mid=(l+r)>>2是不是满足题意,根据该判断更新ll或者rr的值。二分法的应用大概包括以下几部分:

  • 最大化最小值
  • 最大化平均值
  • 查找第kk大的值
  • 最小化第kk大的值

专栏有不少对应的题

尺取法

尺取法简介,尺取法是对数组保存一对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案。这对下标记为l,rl,r,与二分法不同的是,这里的l,rl,r都是从区间的一侧开始的,而不是从区间两侧,而且尺取法擅长处理区间相关的问题,比如

  • 大于某阈值的最短连续序列和
  • 小于某阈值的最长连续序列和
  • 最接近某值的连续序列和

同样专栏有不少题

折半枚举

有时候,问题的规模较大,无法枚举所有元素的组合,但能够枚举一半元素的组合。此时,将问题拆成两半后分别枚举,再合并它们的结果这一方法往往非常有效。不同于前两种方法,折半枚举并不需要维护两个端点,它的精髓在于如何拆分,使得我们不用枚举所有的元素。

目前见到过最经典的应用无非是
在这里插入图片描述
我们无法枚举所有的A+B+C+DA+B+C+D的值,但是我们可以将A+B+C+D=0A+B+C+D=0拆分成A+B=C+DA+B=C+D,然后分别枚举A+B,C+DA+B,C+D两个部分进行判断。

折半枚举部分例题我放在二分法的专栏了。有兴趣可以solve

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!