【数学】- 序理论

序理论

感谢Meatherm在之前的讲课,才让我有机会思考这一理论

简介

序理论对二元关系的研究在图论、数学、动规等OI常见板块中都有应用,可以说,这些关于次序的思考及它们所拥有的性质都是美妙的。这种「次序」,在元素与元素之间连结了隐形的线,于是编织起了严密的网,于是织构出由此推出的万千理论。
序理论在OI中常见于各维偏序问题、Dilworth定理应用。

概念

下面以并不严谨的角度解释一些概念

二元关系

不论全序还是偏序,都注重「序」。那么简单的,我们可以试图表示出它们的 关系(真实的关系可以是复杂的,但研究 < 会便于理解,所以下文可能以 < 举例偏多),以体现序。

首先,我们先明确需要确定序的关系的对象,譬如我们拿出一个集合 P 中的对象 xyz

还是先探讨在集合 P 上的关系 R,对于关系 R 的一些优美的性质被定义如下:

  • xRx,则称 R自反 的(如 )。
  • xRx 不成立时,则称 R反自反 的(如 <)。
  • xRyyRx,则称 R对称 的(如 )。
  • xRyyRx 要成立,那么必须满足 x=y,则称 R反对称 的(如 )。也表述为不存在 xy 同时满足 xyxRyyRx,因为要某些关系 R(如 <)满足 x<yy<x 本身就不可能;
  • xRyyRzxRz,则称 R传递 的(如 )。

注意:套用定义发现,一些关系既是对称也是反对称的(如 =)。

偏序关系、全序关系

非严格 偏序关系即为满足自反、反对称和传递性的关系。严格 偏序则满足反自反、反对称和传递性。而满足偏序关系的集合称 偏序集合。由一个集合 P 及其上定义的偏序关系 R 组成的偏序集 (P,R) 按严格与否记作 (P,)(P,)

当然,xy 可能满足不了二元关系 R(比如 R 为整除关系 | 时,我们可以有 2|4,但 23 既没有 2|3,也没有 3|2)。所以我们称只有 xRyyRx 时两个元素才 可比。所以我们在讨论元素间的(严格)小于关系时一定基于元素间可比。

对于 xy 且不存在满足 xzyz 时,我们又可以说 y 覆盖x

当任意两个集合元素都满足 xRy yRx 时,称关系 R 满足 全序 性,这样的集合是 全序集合

偏序集

我们现在转而探讨一个 偏序集 (X,R) 中的对象 xy

  • 若不存在 y 满足 yRx,则称 x 是其 极小元(如 (R,>) 中, 就是极小元)。
  • 最小元:任意 y 都有 xRy,则称 x 是其最小元。
  • 若不存在 y 满足 xRy,则称 x 是其 极大元(如 (R,<) 中, 就是极大元)。
  • 最大元:任意 y 都有 yRx,则称 x 是其最大元。

注意:极大元和极小元可能不止一个,因为当其他元素与其不可比时也满足定义,最大元和最小元则可能不存在,存在则一定唯一,并且与其他任意元素可比。

  • 若集合 XX 满足 X 中任意两个元素均可比,则称 X(X,R) 上的链。(没错,全序集合也称链)
  • 若集合 XX 满足 X 中任意两个元素均不可比,则称 X(X,R) 上的反链。

注意:部分可比部分不可比的什么都不是。只有一个元素的集合既是链又是反链。

  • 若集合 X 上的链构成的集合 S=S1,S2,···,Sk 满足 xX,1ik 使得 xSi,则称 S(X,R) 上的 链覆盖。(把每个元素都至少归入了一个链)
  • Si,Sj 两两不交,则称 S(X,R) 上的 链划分。称 |S| 是链覆盖/划分的大小。(把每个元素仅划入一个链)。自然地,最小链覆盖大小等于最小链划分大小。

其实这样的命名可以很自然地移植在DAG里,“链”这样的定义惊人地契合,而最小最大元则如同超级源汇点。我初学时有这样一种yy:譬如在DAG中,我们以节点表示元素,有向边 (u,v) 表示偏序关系 uv ,或者说,满足 uRv 的话,DAG就描述了一个偏序集合(省去自环),并能很好地反映关键信息。以 R 表示整除关系(是的,整除是一种经典的偏序关系)为例:

我们可以直观地得到没有入度的点 23 就是极小元,而没有出度的点 1264 则是极大元。如果添加 1198,那么就有了最大元 198 和最小元 1。任意一条链就是“链”,构成一个全序集合,如 {2,6,12}。同时,绿链和橙链构成了最小链覆盖。任意两两没有连边的元素集合就能构成一条反链,如 {6,4}。蓝线则是传递性作用下的“前向边”(直连 k 级孩子)。

而实际上,确实有与之相近的一种表示方法,称 哈斯图

在哈斯图中,我们引入“引力”,默认偏序关系中“小”的在下,“大”的在上,只有满足 y 覆盖 x 时(即省去蓝边)才在 yx 之间连 无向边(因为偏序关系反对称,一定单向,所以这时所有箭头都朝上了,可以忽略不画。)。

继续套用整除关系的上例,我们得到如下哈斯图:

而在哈斯图中,我们可以更简单地找到一条反链:横向没有关联的一条线。

再来看链和反链几个显然的关系:

  • 对于任意反链 A 和链 C|AC|1,即任意链仅包含某个反链中的最多一个 元素,任意反链仅包含某个链中的最多一个元素;
  • 向偏序集中加入一个元素,或从偏序集中删除一个元素,最大链、最小链划分、最大反链和最小反链划分的大小至多变化 1

于是就有了:

如果 (X,R) 上存在一个大小为 r 的链,因为其反链划分中每一条反链最多包含这条链中的一个元素,所以其反链覆盖大小不小于 r。对于大小为 r 的反链,我们能够得到类似的对偶结论:

偏序集最小反链划分大小不小于偏序集最大链大小,偏序集最小链划分大小不小于偏序集最大反链大小。

实现

一般我们只会涉及二维偏序或三维偏序问题。主要的思路就是通过手段降维,于是常见有以下标签:“树状数组、排序、cdq分治、树套树”。树套树可以做三维偏序,不过这里不涉及高级数据结构。

二维偏序

统计受两个条件限制 (ai<aj,bi<bj) 的点对 (i,j) 时,常使用 排序+树状数组。通过按 a 的一维限制排序,将限制变成了简单的时间限制。于是问题转化为统计 j 之前所有满足 b 的一维限制条件的 i。这是树状数组板题,每次枚举 j 时询问 bi<bj 的个数后加入 bj 的贡献即可。

三维偏序

统计受三个条件限制 (ai<aj,bi<bj,ci<cj) 的点对 (i,j) 时,常使用 cdq分治。仍按 a 的一维限制排序,在新序列上分治处理二维偏序。其归并过程:递归处理序列左右两部分区间,再设法统计跨区间的点对间贡献。

具体地,先向左区间 [l,mid] 递归,处理完再递归右区间 [mid+1,r]。对于递归完成待合并的两区间,考虑统计左区间元素对右区间的贡献:对于左区间元素 i 和右区间元素 j,自然满足 ai<aj。于是同二维偏序问题一样考虑将左右区间分别按 b 的一维限制排序,使用双指针将 jr 推,imid 推,过程中使用树状数组不断加入 ci 并询问 cj 就能维护 c 维度了。注意每次做完一个左区间贡献后需将树状数组清空。

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 定理的对偶情形)

证明

首先考虑其对偶情形。我们找到偏序集中的极小元,不难发现这些极小元构成了一个反链。删去这些极小元,偏序集中的最大链大小恰好减少 1。因此,重复 k 次我们就得到了一个等于偏序集最大链大小的最小反链划分。

对于Dilworth定理,考虑对其施以归纳法,证明 |X|=n 时的偏序集满足条件。

n=1 的情形是显然的。如果 |X|=n1 的情形成立,不妨考虑取走 (X,R) 中的某个最小元 c,则 (Xc,R) 的最小链划分大小等于其最大反链大小。不妨设其大小为 k,现在的最小链划分为 S={S1,S2,···,Sk},且存在 m 条最大反链 T1,T2,···,Tm,每一个 Ti 大小都为 k

我们发现,Ti 是在每一个 Sj 中恰好取一个元素而构成的。设 Ai 表示,Si 中被某个 Tj 取走过的最大元素。因为链上元素两两可比,于是总是存在一个最大元素。

进一步的观察可以得知,{A1,A2,···,Ak} 是一个反链。考虑反证法:如果存在 ij 使得 AiRAj,那么考虑在链 Sj 取走了 Aj 的反链 Tx,一定会在链 Si 中取走某个元素 e 使得 eRAi,因为 Ai 是被取走过的最大元素。那么有 eRAjTx 作为反链要求所含元素两两不可比,却出现了 eTx,AjTx,eRAiRAj 和反链的定义矛盾。

现在考虑将这个最小元 c 放回到偏序集中。分为两种情况:

  • c 与任意 Ai 不可比,则 {A1,A2,···,Ak,c} 是一个大小为 n+1 的反链。因此,(X,R) 的最小链划分大小 k+1。向 (Xc,R) 中加入 c 得到 (X,R) 的过程中,最小链划分和最大反链大小不会增加超过 1,也即不会大于 k+1,因此二者都等于 k+1
  • c 和某个 Ai 可比,则偏序集的最小链划分大小不变,为 k。因为偏序集的最小链划分大小不小于最大反链大小,同时最大反链大小不会减小,因此最大反链大小亦等于 k

综上,我们完成了 Dilworth 定理的证明。

应用

老生常谈的,用于优化 1999年NOIP普及组 导弹拦截 的第二问:求正整数序列 a 的最小不上升子序列划分大小。

第二问可以通过求 最长上升子序列长度 解决。这里只以偏序集的角度证明一遍:一个最长不上升子序列其实就是数组下标集合中满足严格偏序关系 Rx<y,axay 的元素组成的一条链。在此偏序 R 下,一条反链集合中的元素就必然不可比,即 x<y 时必须有 ax<ay。所以最大反链大小就是最长上升子序列长度,通过贪心+二分做到与第一问一样的 O(nlogn)。当然,对于两问,用树状数组处理二维偏序问题也是可行的。

推广来说,我们通常可以构造出关系 R 满足在 R 关系上是反链的集合在 R 关系上就是链,这样求 R 上的最小链划分可以方便地转化为求 R 关系上的最大链大小。

posted @   b1t_sad  阅读(281)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示