鸽巢原理
本系列前面的每一页都在把方案数算出来。计数之外还有另一类问题:不问共有多少种,只断言某种情形一定出现。鸽巢原理(pigeonhole principle)是其中最简单的一条,它既不指出是哪一屉,也不给出分布,却能推出一批按两条计数原理硬算不出来的结论。
1 · 基本形与加强形
定理 1.1 把 件物品放进 个抽屉(),必有一屉不少于 件。
证明 反设每屉都至多 件。由 知 ,故总件数不超过 ,与共有 件矛盾。∎
时 ,退回最常见的说法:物品比抽屉多,必有一屉装了不止一件。加强形给出的下界是紧的,均分即达到:写 (),让 个抽屉各放 件、其余各放 件,最满的一屉恰好 件。所以这条原理的结论无法再改进,能改进的只有巢的选法。
2 · 巢的设计
原理本身一行就能证完,用起来的全部难度在一步:谁是鸽子、谁是巢。两个经典例子的巢都不是题面上现成的。
从 到 中任取 个数,必有一个整除另一个。巢取最大奇因子:每个正整数唯一写成 ( 为奇数),而 到 之间的奇数只有 个,于是 个数里必有两个共用同一个 ,写成 与 后,指数小的整除指数大的。 这个数量不能再减: 这 个数两两不整除,因为其中任意两个的比值都严格落在 与 之间。
任意
个整数中,必有若干连续项之和被
整除。鸽子是
个前缀和
,巢是模
的
个余数;两个前缀和同余时相减,
正好是第
项到第
项之和,被
整除。空前缀
必须算作一只鸽子,否则只有
只鸽子进
个巢,结论落空;consecutiveSumDivisible 里那句把余数
预先记在下标
上的初始化,兑现的就是这一只鸽子。
3 · Erdős–Szekeres 定理
定理 3.1 长 的实数序列必含长 的递增子列,或含长 的递减子列。
证法是给每个位置贴一对标号。第 位标 ,分别是以该位结尾的最长递增子列长度与最长递减子列长度。任取两个位置 :若 ,把第 位接到第 位的递增子列后面,得 ;否则 ,同理得 。两种情形下标号都不相同,故 个标号两两互异。若定理不成立,每个 至多 、每个 至多 ,全部标号只能落进 个格子,装不下 个互异标号。
长度 是紧的。把 到 切成 段,段内递增而段与段之间整体下降, 时即 。递增子列跨不了段,最长为 ;递减子列每段至多取一项,最长为 。定理给的只是下界,随机序列离它很远:、长 的 个随机排列实测, 个同时含长 的递增子列与长 的递减子列,最长单调子列平均 项。
警示 · 相等元素让「递增」的严格与否成为必须先定的口径。本页取递增非严格、递减严格,incDecLabels 的默认参数即此。若两侧都取严格,标号互异这一步立刻失效:相邻两项都是
时两个位置的标号同为
。实测长
、取值来自
个数的全部
条序列,严格口径下
条出现标号相同的两个位置,其中
条连结论都不成立(,长
,却既无长
的严格递增子列也无长
的严格递减子列,全等序列即是)。改用非严格递增后,同一批
条序列的标号全部两两互异,
处失效一并消失。
把「必有一屉两件」从抽屉搬到图的边上,就得到 Ramsey 型结论:Ramsey 理论里 的上界论证,正是对某个顶点的 条边按二色分巢,取出不少于 条同色边。
4 · 参考文献
- Pigeonhole principle. Wikipedia. 基本形、加强形与若干标准应用。https://en.wikipedia.org/wiki/Pigeonhole_principle
- Erdős–Szekeres theorem. Wikipedia. 定理陈述、标号法证明与 紧例。https://en.wikipedia.org/wiki/Erd%C5%91s%E2%80%93Szekeres_theorem
- Longest increasing subsequence. Wikipedia. 标号的计算方法与 算法。https://en.wikipedia.org/wiki/Longest_increasing_subsequence