二分法,尺取法,折半枚举,你们到底是什么?
最近写了一些题,对这三个概念稍微有点混淆,写点东西回忆一下。 二分法 二分法简介 ,将题目要求的量当做目标值,使用两个参数 l , r l,r l , r , l l l 从初始位置(往往是最小值之类的), r r r 从最终位置(往往是最大值),每次判断二者的平均值 m i d = ( l + r ) > > 2 mid=(l+r)>>2 m i d = ( 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 都是从区间的一侧开始的 ,而不是从区间两侧,而且尺取法擅长处理区间相关的问题,比如 大于某阈值的最短连续序列和 小于某阈值的最长连续序列和 最接近某值的连续序列和 同样专栏有不少题 折半枚举 有时候,问题的规模较大,无法枚举所有元素的组合,但能够枚举一半元素的组合。此时,将问题拆成两半后分别枚举,再合并它们的结果这一方法往往非常有效。不同于前两种方法