凸性相关
定义
- 凸包:平面上包含所有点的最小多边形。
- 上凸壳、下凸壳:凸包的上下两部分。
- 离散函数的凸性:函数图像呈现为凸壳形状。
凸包性质
- 上下凸壳的边斜率具有单调性。即对于上凸壳,从左到右各边斜率单调递减;对于下凸壳,从左到右各边斜率单调递增。
- 对于凸包内任意两点 和 ,线段 上的所有点 , 都不在凸包外。
- 对于任意一条经过凸包上某个点 且斜率固定为 的直线 ,若要使 最大(或最小),则该直线必然经过凸包上的点。进一步地,对于凸壳而言,其斜率 必然在其邻边斜率范围之内。
函数凸性性质
- 对于满足四边形不等式的序列划分问题,设将序列划分为 段的最优值为 ,则 关于 必然具有凸性。
- 若函数 具有凸性,那么函数 或 仍然具有凸性。例如,若“恰好划分为 段”的情况具有凸性,那么“至少划分为 段”的情况一定具有凸性,但反之并不一定成立(虽然实际中未见过反例)。
- 在费用流问题中,设最小费用为 ,流量为 ,则 关于 具有凸性。若要指定某条边必选,可将其费用设为 ,同样可证明其凸性。
联想点
当题目中出现比值(如 )、乘积(如 )等实数意义上的形式时,应联想到凸包。凸包通常可用于解决一些特殊的最优化问题。
建立凸包
线性扫描法(离线做法)
设有点集 ,首先将点按照横坐标 从小到大排序。然后采用增量法构造凸包。假设已构造好前 个点的凸包 ,当加入点 时,考虑凸包形态的变化。根据凸包的定义,若从凸包 的末尾点开始,与 形成的折线呈现凹的形状,则将末尾的这些凹进去的点删掉,剩余部分依然构成凸包。
插入法(在线凸包)
每次插入一个点 ,需找到其横坐标 被凸包的哪条边跨过。若加入当前点 后不会使凸包更优,则直接结束操作。否则,将 点左右两边凹进去的点删掉。其正确性与上述线性扫描法类似。
旋转卡壳
常见用途
用于求解平面上的最远点对。
引理
对于平面上的点集,其中任意一个点的最远点一定在该点集的凸包上。
流程
基于凸包边的斜率单调性,我们按顺时针方向枚举凸包的边 。对于每一条边 ,考虑在凸包上与之距离最远的点 。由于凸包的性质,最远点 也是按顺时针方向移动的。每次更新由边 的两个端点 、 和最远点 组成的点对作为答案。显然,通过这种方式可以考虑到所有不劣的解。
闵科夫斯基和
定义
设两个图形 和 ,闵科夫斯基和 ,即由 中任意一点与 中任意一点相加得到的所有点组成的新图形。
基本结论
若 和 是两个凸包,则它们的闵科夫斯基和 仍然是一个凸包。
常见用途
常用于凸包合并以及 卷积。下面主要讨论凸壳的合并。
流程
每次将两个凸壳 和 的边拿出来,根据边的斜率进行贪心处理,类似于归并排序的方式。新凸壳的起始点是原凸壳 和 起始点之和。
感性理解
为了使新的凸包能够包含所有由 和 中两点相加可能产生的点,需要让凸包尽可能大。
对 卷积的理解
可以将两个多项式 和 看成两个点集 和 。对于一个固定的横坐标 ,其 卷积的结果为 ,这恰好符合闵科夫斯基和的定义,即所有满足横坐标和等于 的点的纵坐标和的最大值。
wqs 二分
常见用途
给定 ,求解凸函数 的值。
流程
通过二分斜率 ,考虑斜率为 的直线 与凸函数 的切点横坐标 。由于凸性,横坐标 关于 具有单调性。核心在于找到使 取得最大值的点的横坐标 ,该点即为切点。
细节
- 二分的值域:需要分析凸壳上的边的斜率值域范围。通常只需考虑凸壳上第一条边和最后一条边的斜率,以此确定二分的上下界。
- 二分的类型(整数或实数):
- 若为离散凸函数,通常凸壳上每条边的斜率为整数。
- 然而,由于可能存在共线的点,直接二分实数可能出现问题。因此,建议二分整数。
- 为处理共线情况,可钦定 取最大或最小值,从而通过二分进行判定。
- 构造解:朴素的 二分可较容易地得到 ,但在求解具体的 时会受到共线情况的影响。(待补充完善,目前对此理解尚不透彻,网上也缺乏完全准确的资料)
wqs 二分和闵科夫斯基和的联系
对于一个确定斜率 的直线,设两个凸壳 和 ,直线与 、 的切点对应的截距之和,恰好等于 和 做闵科夫斯基和之后的凸壳与该直线切点的截距。这表明 二分和闵科夫斯基和存在紧密联系。
这种联系主要源于具有凸性的问题通常可划分为若干子问题,最终通过合并子问题的解得到结果。闵科夫斯基和用于维护所有可能情况的解(以凸壳形式呈现),而 二分则专注于维护一个特定的解(以切点形式呈现)。有时,我们可以先预处理出闵科夫斯基和的结果,再结合 二分解决多次询问的问题。
斜率优化
核心
通过分析凸包的形态,确定最优解的选取方式。具体如下: 假设 方程形如 。注意到经过点 且斜率为 的直线方程为 ,其截距为 。因此,我们将每个点看作 的形式,要寻找斜率为 的直线经过某个点时的最大截距,所以必然保留的是上凸包。
常见算法
- 建立凸包:
- 在线且横坐标无单调性:可使用李超线段树。
- 其他情况:直接通过线性方式建立凸包。
- 寻找最优点:
- 在线且查询斜率无单调性:可通过二分凸包或在李超线段树上直接查询。
- 其他情况:使用指针直接扫描。
例题
- [ABC356G] Freestyle:判定可行性相对简单,关键在于处理最优性问题。贪心和动态规划方法在此处难以突破,网络流方法也不太适用。假设仅使用两种 ,列出相关式子。其中不超过 的条件在实数意义下大概率可使等式成立,此时可发现该式子与向量的等和线相关。为使整体取值尽量小,需先求出凸包,然后在凸包上进行二分查找。
- [JOISC2022] 京都观光:直接求解较为困难。写出拐点相关的式子后,可发现其与凸包相关。
szzjz WiKi