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

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

二分法

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

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

专栏有不少对应的题

尺取法

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

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

同样专栏有不少题

折半枚举

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

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

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值