你呀你呀

很好听的派蒙歌,6.1 要备战期末没法放歌所以在 5 月底放了每日一歌,希望可以让大家开心一些,也希望派蒙生日快乐!

你呀你呀 快给我休息一下

长了颗痘又 掉了好几根头发

怎么不说话 是不是记忆力也变差

呆了 谁陪 我呀

知不知道 你的眼神越来越可怕

贪黑起早 直奔魑魅魍魉 耍刀枪

未来计划已经安排得密密麻麻

看了让人害怕~

我很sure sure

你会累垮

我要赶紧想个办法 让你重新变得优雅

我很sure sure

这个星球

明天不会爆炸~

你呀你呀 快给我休息一下

长了颗痘 又掉了好几根头发

怎么不说话 是不是记忆力也变差

呆了 谁陪 我呀

笑肌抬一下 露出快乐的门牙

不要不要被 别人的标准绑架

你永远是我 眼中最优秀的冒险家

今天 休息 听话

恩咳咳,怎么了怎么了

你这人看起来怎么精神不太好

需要本大爷帮忙是吧

哈哈哈哈,让我看看你的日程

我的杵子挥一挥

阿丑唤一声咩咩

攀高危险都消灭

在五朵蘑菇上跳跃

调皮的水母追一追

你就安静歇歇

新的委托别理会

我替你拒绝

额天牛之章你要不还是自己做一下吧……

我很确定

你不简单

孤军奋战走到现在 还带着小孩

(派蒙:喂,放牛的!)

I’m sure sure

从不偷懒

快乐就少一半

你呀你呀 快给我休息一下

长了颗痘 又掉了好几根头发

怎么不说话 是不是记忆力也变差

呆了 谁陪 我呀

笑肌抬一下

露出快乐的门牙

没有人可以 永远奔跑不停下

世界那么大 整理好了心情再出发

今天 休息 听话

LALALALALA

听完这首歌 明天再去和生活打架

累了 睡吧 晚安

温馨提示

本文当中的式子大多都经过了参考资料的证实,但是证明细节含有大量 poi 酱口胡的成分,不免多有谬误,欢迎读者在评论区指出!

本文对拉格朗日对偶、minimax 定理等知识大多只先介绍最易懂且与 wqs 二分相关的内容,感兴趣的读者可以参阅本文的参考资料了解更为一般的结论。

定义

我们定义一个函数 \(f(x)\) 是上凸的,当且仅当 \(f(\lambda x+(1-\lambda)y)\geq{\lambda f(x)+(1-\lambda)f(y)}\),或者说这个函数的斜率递减。

我们定义一个函数 \(g(x)\) 是下凸的,当且仅当 \(g(\lambda x+(1-\lambda)y)\leq{\lambda g(x)+(1-\lambda)g(y)}\),或者说这个函数的斜率递增。

wqs 二分

wqs 二分,可以用来求上凸函数 \(f(x)\) 的点值。使用 wqs 二分求点值时这个点值一般不容易直接求,但是易于求得 \(f'(k)=\max_{x}{\{f(x)-kx\}}\),比如要求在一定限制下恰好取 \(x\) 个物品的最大收益 \(f(x)\)(“一定限制”限制了取最大的 \(x\) 个物品等方法是非法的,且使得 \(f(x)\) 上凸),此时因为“恰好”的限制,使得求 \(f(x)\) 很难进行,但求 \(f'(k)\) 相当于给每个物品的收益减 \(k\) 以后在“一定限制”下进行 dp 转移,因此一般容易求出。

我们先给出结论:有函数

\[\begin{aligned}
&g(\lambda)\\=&f'(\lambda)+k\lambda\\=&\max_{x}{\{f(x)-\lambda x\}+k\lambda}
\end{aligned}
\]

是下凸的且它的最小值是 \(f(k)\),因此我们可以令 \(k\) 为那个要带入 \(f\) 求值的数,二分求出这个函数的最小值即可得到 \(f(k)\),此时如果求 \(f'(x)\) 是 \(O(n)\) 的,那么加上二分的总复杂度为 \(O(n \log n)\)。

接下来我们考虑证明这个结论。首先考虑把我们要求的东西转化成求 \(f(x)\) 的最大值,要求取到最大值的 \(x\) 满足 \(h(x)=0\),其中 \(h(x)=k-x\)。显然这一限制使得 \(f\) 只能在 \(k\) 处取值,结果也一定是 \(f(k)\)。考虑把式子变成

\[\max_{x}\min_{\lambda}{\{f(x)+\lambda{h(x)}\}}
\]

其中 \(\lambda\) 是一个上界够大下界够小的数,使得当 \(h(x)>0\) 时可以在 \(\lambda\) 为最小值时令 \(f(x)+\lambda{h(x)}\) 极小而对外层的 \(\max\) 没有贡献,而当 \(h(x)<0\) 时则需要 \(\lambda\) 足够大。把原式变成

\[\max_{x}\min_{\lambda}{\{f(x)-\lambda x+k\lambda\}}
\]

发现他与

\[\min_{\lambda}g(\lambda)=\min_{\lambda}\max_{x}{\{f(x)-\lambda x+k\lambda\}}
\]

形式非常相似,下面我们先不考虑 \(g\) 的凸性,考虑 \(\min\) 和 \(\max\) 能否互换。

考虑对于 \(f(x)+\lambda h(x)\),当 \(x\) 确定时,这个式子的值关于 \(\lambda\) 线性。现在假设这个式子的最小值在 \(\lambda\) 极大时取道,事实上下面的证明只需用到对于不同的 \(x\) 该式在同一 \(\lambda\) 处取最小值,所以这个假设对正确性没有影响。现在考虑 \(\lambda\) 确定时,这个式子分两个部分:上凸的 \(f(x)\),关于 \(x\) 线性的 \(-\lambda x+k\lambda\)。考虑一个上凸函数满足

\[f(x)-f(x-\epsilon)\geq{f(x+\epsilon)-f(x)}
\]

其中 \(\epsilon\) 为极小值。而加上一个线性的部分后,对于每个 \(x\),\(f(x)-f(x-\epsilon)\) 不变,\(f(x+\epsilon)-f(x)\) 也不变,所以一个凸的函数加上一个一次函数仍然满足上式条件,即这个函数还是凸的。

总结一下,我们发现 \(f(x)+\lambda h(x)\) 当 \(x\) 确定时关于 \(\lambda\) 线性,当 \(\lambda\) 确定时关于 \(x\) 是上凸的。接下来我们将用这些性质证明对于这个式子交换 \(\min\) 和 \(\max\) 的合理性。

我们先来证明一个条件和结果都更弱的结论:对于任意函数 \(F(x,y)\) 有

\[\max_{y}\min_{x}F(x,y)\leq{\min_{x}\max_{y}F(x,y)}
\]

考虑对于任意 \(x,y\)

\[\min_{x}F(x,y)\leq{F(x,y)}
\]

也有对于任意 \(x\)

\[\max_{y}\min_{x}F(x,y)\leq{\max_{y}F(x,y)}
\]

从而

\[\max_{y}\min_{x}F(x,y)\leq{\min_{x}\max_{y}F(x,y)}
\]

现在我们设 \(F(\lambda,x)=f(x)+\lambda h(x)\),假设对于任意 \(x\),\(\lambda=c\) 时该式的值极小,当 \(\lambda=c\) 时,\(x=d\) 时该式的值极大,那么

\[\max_{x}\min_{\lambda}F(\lambda,x)=F(c,d)
\]

现在考虑 \(\min_{\lambda}\max_{x}F(\lambda,x)\),那么 \(F(c,d)\) 一定能在 \(\lambda=c\) 时作为 \(\max_{x}F(c,x)\) 被纳入到可以对外层 \(\min\) 贡献的数中。考虑如果 \(\min\) 不选这个数,他的动机一定是答案比 \(F(c,d)\) 小,但是由上一段的结论,\(F(c,d)\) 不会比答案大,所以 \(F(c,d)\) 即为所求。

至此,我们证明了

\[\begin{aligned}
&f(x)\\=&\max_{x}\min_{\lambda}{\{f(x)+\lambda{h(x)}\}}\\=&\min_{\lambda}\max_{x}{\{f(x)+\lambda{h(x)}\}}\\=&\min_{\lambda}g(\lambda)
\end{aligned}
\]

接下来我们证明 \(g\) 的下凸性。考虑直接带入定义

\[\begin{aligned}
&g(\lambda x+(1-\lambda)y)\\=&\max_{c}{\{f(c)+(\lambda x+(1-\lambda)y)h(c)\}}
\end{aligned}
\]

假设在 \(c=c_0\) 时取到最大,则原式为

\[\begin{aligned}
&f(c_0)+(\lambda x+(1-\lambda)y)h(c_0)\\=&\lambda (f(c_0)+x h(c_0))+(1-\lambda)(f(c_0)+y h(c_0))
\end{aligned}
\]

由于 \(g(x)\) 和 \(g(y)\) 的最大值不一定在 \(c_0\) 处取到,因此原式的值小于等于 \(\lambda g(x)+(1-\lambda)g(y)\),下凸性得证。

综上所述,我们可以二分 \(g\) 的最小值求解 \(f(x)\)。对于 \(g\) 函数极小值所对应的自变量的范围,也就是我们二分的界,考虑 \(g\) 的自变量 \(\lambda\) 的使命是使得对于每个 \(x\neq k\) 有 \(f(x)+\lambda h(x)\) 不如 \(f(k)\) 优秀。考虑每次 \(x\) 减小或增大 \(1\) 后 \(\lambda h(x)\) 的改变量为 \(\lambda\),对于 \(x<k\) 要求 \(\lambda\) 必须小于 \(f\) 的斜率最小值,这样就能保证每次 \(f(x)\) 移动的增加量被 \(\lambda\) 覆盖。同理,这个上界为斜率最大值。

下面给出一份伪代码以供参考。

\[\begin{array}{l}
\textbf{Input. } \text{值 } x \text{ 表示要求 } f(x) \text{ 的点值,}\text{值 } minslope \text{ 是}
\text{一个小于 }f\text{ 最小斜率}\\
\text{的值,值 } maxslope \text{ 是一个大于 } f \text{ 最大斜率的值。}\\
\textbf{Output. } f(x)\text{ 的值。}\\
\textbf{Method.}\\
\begin{array}{ll}
1 & left \gets minslope\\
2 & right \gets maxslope\\
3 & ans \gets \infty\\
4 & \textbf{while } left\leq right\\
5 & \qquad mid=\frac{left+right}{2}\\
6 & \qquad leftval \gets f'(mid)+mid\times x\\
7 & \qquad rightval \gets f'(mid+1)+ (mid+1)\times x\\
8 & \qquad \textbf{if } leftval<rightval\\
9 & \qquad\qquad ans \gets \min(ans,leftval)\\
10 & \qquad\qquad right \gets mid-1\\
11 & \qquad \textbf{else if } leftval>rightval\\
12 & \qquad\qquad ans \gets \min(ans,rightval)\\
13 & \qquad\qquad left \gets mid+2\\
14 & \qquad \textbf{else}\\
15 & \qquad\qquad \textbf{return }leftval\\
16 & \textbf{return } ans
\end{array}
\end{array}
\]

Acknowledgement

关于 Acknowledgement

新增此板块,用以感谢对此有帮助的人。

如果您想被 Acknowledge 且未被提到,请评论到任意地方,thx。

感谢 jijidawang 的指导以及机房的小伙伴们在我推崩溃的时候鼓励我。

感谢 wqs 大神的发明。

Reference

你呀你呀(米哈游《原神》2023生日会同人曲)_百度百科

一文看懂拉格朗日乘子法、KKT条件和对偶问题

max-min 不等式(minimax inequality) - CSDN博客

2023.11.7 闲话 - yspm - 博客园

2024.10.15 闲话 - yspm - 博客园

2025.1.1 闲话 - yspm - 博客园

四边形不等式优化 - OI Wiki

【学习笔记】WQS二分详解及常见理解误区解释 - CSDN博客

【闲话 No.4】 wqs 二分的更多相关文章

  1. CF739E Gosha is hunting DP+wqs二分

    我是从其他博客里看到这题的,上面说做法是wqs二分套wqs二分?但是我好懒呀,只用了一个wqs二分,于是\(O(nlog^2n)\)→\(O(n^2logn)\) 首先我们有一个\(O(n^3)\)的 ...

  2. wqs二分

    今天模拟赛有一道林克卡特树,完全没有思路 赛后想了一想,不就是求\(k+1\)条不相交的链,使其权值之和最大嘛,傻了. 有一个最裸的\(DP\),设\(f[i][j][k]\)表示在以\(i\)为根的 ...

  3. 关于WQS二分算法以及其一个细节证明

    应用分析 它的作用就是题目给了一个选物品的限制条件,要求刚好选$m$个,让你最大化(最小化)权值, 然后其特点就是当选的物品越多的时候权值越大(越小). 算法分析 我们先不考虑物品限制条件, 假定我们 ...

  4. [总结] wqs二分学习笔记

    论文 提出问题 在某些题目中,强制规定只能选 \(k\) 个物品,选多少个和怎么选都会影响收益,问最优答案. 算法思想 对于上述描述的题目,大部分都可以通过枚举选择物品的个数做到 \(O(nk^2)\ ...

  5. BZOJ5252 八省联考2018林克卡特树(动态规划+wqs二分)

    假设已经linkcut完了树,答案显然是树的直径.那么考虑这条直径在原树中是怎样的.容易想到其是由原树中恰好k+1条点不相交的链(包括单个点)拼接而成的.因为这样的链显然可以通过linkcut拼接起来 ...

  6. [学习笔记]凸优化/WQS二分/带权二分

    从一个题带入:[八省联考2018]林克卡特树lct——WQS二分 比较详细的: 题解 P4383 [[八省联考2018]林克卡特树lct] 简单总结和补充: 条件 凸函数,限制 方法: 二分斜率,找切 ...

  7. [八省联考2018]林克卡特树lct——WQS二分

    [八省联考2018]林克卡特树lct 一看这种题就不是lct... 除了直径好拿分,别的都难做. 所以必须转化 突破口在于:连“0”边 对于k=0,我们求直径 k=1,对于(p,q)一定是从p出发,走 ...

  8. CF739E Gosha is hunting 【WQS二分 + 期望】

    题目链接 CF739E 题解 抓住个数的期望即为概率之和 使用\(A\)的期望为\(p[i]\) 使用\(B\)的期望为\(u[i]\) 都使用的期望为\(p[i] + u[i] - u[i]p[i] ...

  9. 「学习笔记」wqs二分/dp凸优化

    [学习笔记]wqs二分/DP凸优化 从一个经典问题谈起: 有一个长度为 \(n\) 的序列 \(a\),要求找出恰好 \(k\) 个不相交的连续子序列,使得这 \(k\) 个序列的和最大 \(1 \l ...

  10. 洛谷P4383 [八省联考2018]林克卡特树lct(DP凸优化/wqs二分)

    题目描述 小L 最近沉迷于塞尔达传说:荒野之息(The Legend of Zelda: Breath of The Wild)无法自拔,他尤其喜欢游戏中的迷你挑战. 游戏中有一个叫做“LCT” 的挑 ...

随机推荐

  1. Win环境下的批处理命令和JScript脚本结合使用笔记

    最近工作有接触到.bat 批处理命令,在Win环境下编写的时候基于以前的编码习惯,觉得批处理语法可读性较差,于是学习了解了一下结合JScript的用法,特此记录. 什么是JScript JScript ...

  2. php文件和文件夹操作类

    文件和文件夹操作 移动 | 复制 | 删除 | 重命名 | 下载 <?php namespace Framework\Tools; use PharData; class FileManager ...

  3. 不同数据库Oracle、PostgreSQL、Vertical、Mysql常用操作

    不同数据库Oracle.PostgreSQL.Vertical.Mysql常用操作 授权语句用于管理数据库用户的权限,常见的授权语句如下: 1.授权用户对表的SELECT权限 GRANT SELECT ...

  4. Springboot连接Greenplum,分页查询

    1.springboot分页查询greenplum数据报错: org.mybatis.spring.MyBatisSystemException: nested exception is org.ap ...

  5. Unity Mask原理及自定义遮罩

    主要内容 StencilBuffer是什么? 自定义Shader来实现遮罩 Unity Mask的原理 1.什么是StencilBuffer GPU在渲染前会为每个像素点分配一个1字节(8位)大小的内 ...

  6. python爬虫爬取B站视频字幕,词频统计,使用pyecharts画词云(wordcloud)

    我们使用beatifulsop爬取到B站视频的字幕:https://www.cnblogs.com/becks/p/14540355.html 然后将爬取的字幕,使用pandas处理后写到CSV文件中 ...

  7. 为什么 Spring 循环依赖需要三级缓存,二级不够吗?

    Spring循环依赖解决机制中引入了三级缓存,这是因为仅使用二级缓存无法灵活处理代理Bean的早期暴露需求.以下是为什么需要三级缓存的详细分析: 1. 二级缓存的局限性 二级缓存通常用于存储早期暴露的 ...

  8. 使用DVC管理大文件变更历史(基于git)

    DVC(Data Version Control) 是一个专门用于管理数据和二进制文件版本控制 的工具,它特别适合那些需要处理大量非文本文件(如图像.视频.模型.数据集等)的项目. 一般地,如果项目中 ...

  9. struts2——Action的三种编写方式

    Action有三种编写方式POJO方式.实现Action接口.继承ActionSupport类 推荐采用继承ActionSupport类这种方式.因为这个类的功能比较丰富. 方式一:POJO方式 pa ...

  10. 代码随想录第二十七天 | Leecode 455. 分发饼干、 376. 摆动序列、 53. 最大子数组和

    Leecode 455. 分发饼干 题目描述 假设你是一位很棒的家长,想要给你的孩子们一些小饼干.但是,每个孩子最多只能给一块饼干. 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的 ...