【数学】- 序理论
序理论
感谢Meatherm在之前的讲课,才让我有机会思考这一理论
简介
序理论对二元关系的研究在图论、数学、动规等OI常见板块中都有应用,可以说,这些关于次序的思考及它们所拥有的性质都是美妙的。这种「次序」,在元素与元素之间连结了隐形的线,于是编织起了严密的网,于是织构出由此推出的万千理论。
序理论在OI中常见于各维偏序问题、Dilworth定理应用。
概念
下面以并不严谨的角度解释一些概念
二元关系
不论全序还是偏序,都注重「序」。那么简单的,我们可以试图表示出它们的 关系(真实的关系可以是复杂的,但研究 会便于理解,所以下文可能以 举例偏多),以体现序。
首先,我们先明确需要确定序的关系的对象,譬如我们拿出一个集合 中的对象 。
还是先探讨在集合 上的关系 ,对于关系 的一些优美的性质被定义如下:
- 若 ,则称 是 自反 的(如 )。
- 若 不成立时,则称 是 反自反 的(如 )。
- 若 ,则称 是 对称 的(如 )。
- 若 且 要成立,那么必须满足 ,则称 是 反对称 的(如 )。也表述为不存在 同时满足 ,因为要某些关系 (如 )满足 且 本身就不可能;
- 若 ,则称 是 传递 的(如 )。
注意:套用定义发现,一些关系既是对称也是反对称的(如 )。
偏序关系、全序关系
非严格 偏序关系即为满足自反、反对称和传递性的关系。严格 偏序则满足反自反、反对称和传递性。而满足偏序关系的集合称 偏序集合。由一个集合 及其上定义的偏序关系 组成的偏序集 按严格与否记作 或 。
当然, 和 可能满足不了二元关系 (比如 为整除关系 时,我们可以有 ,但 既没有 ,也没有 )。所以我们称只有 或 时两个元素才 可比。所以我们在讨论元素间的(严格)小于关系时一定基于元素间可比。
对于 且不存在满足 的 时,我们又可以说 覆盖 了 。
当任意两个集合元素都满足 或 时,称关系 满足 全序 性,这样的集合是 全序集合。
偏序集
我们现在转而探讨一个 偏序集 中的对象 。
- 若不存在 满足 ,则称 是其 极小元(如 中, 就是极小元)。
- 最小元:任意 都有 ,则称 是其最小元。
- 若不存在 满足 ,则称 是其 极大元(如 中, 就是极大元)。
- 最大元:任意 都有 ,则称 是其最大元。
注意:极大元和极小元可能不止一个,因为当其他元素与其不可比时也满足定义,最大元和最小元则可能不存在,存在则一定唯一,并且与其他任意元素可比。
- 若集合 满足 中任意两个元素均可比,则称 是 上的链。(没错,全序集合也称链)
- 若集合 满足 中任意两个元素均不可比,则称 是 上的反链。
注意:部分可比部分不可比的什么都不是。只有一个元素的集合既是链又是反链。
- 若集合 上的链构成的集合 满足 使得 ,则称 是 上的 链覆盖。(把每个元素都至少归入了一个链)
- 若 两两不交,则称 是 上的 链划分。称 是链覆盖/划分的大小。(把每个元素仅划入一个链)。自然地,最小链覆盖大小等于最小链划分大小。
其实这样的命名可以很自然地移植在DAG里,“链”这样的定义惊人地契合,而最小最大元则如同超级源汇点。我初学时有这样一种yy:譬如在DAG中,我们以节点表示元素,有向边 表示偏序关系 ,或者说,满足 的话,DAG就描述了一个偏序集合(省去自环),并能很好地反映关键信息。以 表示整除关系(是的,整除是一种经典的偏序关系)为例:

我们可以直观地得到没有入度的点 就是极小元,而没有出度的点 则是极大元。如果添加 ,那么就有了最大元 和最小元 。任意一条链就是“链”,构成一个全序集合,如 。同时,绿链和橙链构成了最小链覆盖。任意两两没有连边的元素集合就能构成一条反链,如 。蓝线则是传递性作用下的“前向边”(直连 级孩子)。
而实际上,确实有与之相近的一种表示方法,称 哈斯图。
在哈斯图中,我们引入“引力”,默认偏序关系中“小”的在下,“大”的在上,只有满足 覆盖 时(即省去蓝边)才在 与 之间连 无向边(因为偏序关系反对称,一定单向,所以这时所有箭头都朝上了,可以忽略不画。)。
继续套用整除关系的上例,我们得到如下哈斯图:

而在哈斯图中,我们可以更简单地找到一条反链:横向的没有关联的一条线。
再来看链和反链几个显然的关系:
- 对于任意反链 和链 ,,即任意链仅包含某个反链中的最多一个 元素,任意反链仅包含某个链中的最多一个元素;
- 向偏序集中加入一个元素,或从偏序集中删除一个元素,最大链、最小链划分、最大反链和最小反链划分的大小至多变化 。
于是就有了:
如果 上存在一个大小为 的链,因为其反链划分中每一条反链最多包含这条链中的一个元素,所以其反链覆盖大小不小于 。对于大小为 的反链,我们能够得到类似的对偶结论:
偏序集最小反链划分大小不小于偏序集最大链大小,偏序集最小链划分大小不小于偏序集最大反链大小。
实现
一般我们只会涉及二维偏序或三维偏序问题。主要的思路就是通过手段降维,于是常见有以下标签:“树状数组、排序、cdq分治、树套树”。树套树可以做三维偏序,不过这里不涉及高级数据结构。
二维偏序
统计受两个条件限制 的点对 时,常使用 排序+树状数组。通过按 的一维限制排序,将限制变成了简单的时间限制。于是问题转化为统计 之前所有满足 的一维限制条件的 。这是树状数组板题,每次枚举 时询问 的个数后加入 的贡献即可。
三维偏序
统计受三个条件限制 的点对 时,常使用 cdq分治。仍按 的一维限制排序,在新序列上分治处理二维偏序。其归并过程:递归处理序列左右两部分区间,再设法统计跨区间的点对间贡献。
具体地,先向左区间 递归,处理完再递归右区间 。对于递归完成待合并的两区间,考虑统计左区间元素对右区间的贡献:对于左区间元素 和右区间元素 ,自然满足 。于是同二维偏序问题一样考虑将左右区间分别按 的一维限制排序,使用双指针将 向 推, 向 推,过程中使用树状数组不断加入 并询问 就能维护 维度了。注意每次做完一个左区间贡献后需将树状数组清空。
sort(e+1, e+m+1, cmpa); unique -> ue void work(int l, int r) { if (l == r) return; int mid = l + r >> 1; work(l, mid); sort(ue+l, ue+mid+1, cmpb); sort(ue+mid+1, ue+r+1, cmpb); int i = l, j = mid + 1; while (j <= r) { while (i <= mid && ue[i].b <= ue[j].b) add(ue[i].c, ue[i].cnt), i ++; ue[j].ans += ask(ue[j].c); j ++; } for (int k = l; k < i; k ++) add(ue[k].c, -ue[k].cnt); sort(ue+mid+1, ue+r+1, cmpa); work(mid+1, r); }
Dilworth定理
说实话,这篇文章前面那么多就是为着这个定理铺垫的,OI中似乎只用得到这么多(逃。
定义
- 偏序集的最小链划分大小等于其最大反链大小。(Dilworth 定理)
- 偏序集的最小反链划分大小等于其最大链大小。(Dilworth 定理的对偶情形)
证明
首先考虑其对偶情形。我们找到偏序集中的极小元,不难发现这些极小元构成了一个反链。删去这些极小元,偏序集中的最大链大小恰好减少 。因此,重复 次我们就得到了一个等于偏序集最大链大小的最小反链划分。
对于Dilworth定理,考虑对其施以归纳法,证明 时的偏序集满足条件。
的情形是显然的。如果 的情形成立,不妨考虑取走 中的某个最小元 ,则 的最小链划分大小等于其最大反链大小。不妨设其大小为 ,现在的最小链划分为 ,且存在 条最大反链 ,每一个 大小都为 。
我们发现, 是在每一个 中恰好取一个元素而构成的。设 表示, 中被某个 取走过的最大元素。因为链上元素两两可比,于是总是存在一个最大元素。
进一步的观察可以得知, 是一个反链。考虑反证法:如果存在 使得 ,那么考虑在链 取走了 的反链 ,一定会在链 中取走某个元素 使得 ,因为 是被取走过的最大元素。那么有 , 作为反链要求所含元素两两不可比,却出现了 和反链的定义矛盾。
现在考虑将这个最小元 放回到偏序集中。分为两种情况:
- 若 与任意 不可比,则 是一个大小为 的反链。因此, 的最小链划分大小 。向 中加入 得到 的过程中,最小链划分和最大反链大小不会增加超过 ,也即不会大于 ,因此二者都等于 。
- 若 和某个 可比,则偏序集的最小链划分大小不变,为 。因为偏序集的最小链划分大小不小于最大反链大小,同时最大反链大小不会减小,因此最大反链大小亦等于 。
综上,我们完成了 Dilworth 定理的证明。
应用
老生常谈的,用于优化 1999年NOIP普及组 导弹拦截 的第二问:求正整数序列 的最小不上升子序列划分大小。
第二问可以通过求 最长上升子序列长度 解决。这里只以偏序集的角度证明一遍:一个最长不上升子序列其实就是数组下标集合中满足严格偏序关系 : 的元素组成的一条链。在此偏序 下,一条反链集合中的元素就必然不可比,即 时必须有 。所以最大反链大小就是最长上升子序列长度,通过贪心+二分做到与第一问一样的 。当然,对于两问,用树状数组处理二维偏序问题也是可行的。
推广来说,我们通常可以构造出关系 满足在 关系上是反链的集合在 关系上就是链,这样求 上的最小链划分可以方便地转化为求 关系上的最大链大小。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)