当前位置: 首页 > news >正文

Dilworth定理

偏序关系

RRR是集合AAA的一个二元关系,若RRR满足:
1.自反性:∀x∈A\forall x \in AxA,有xRxxRxxRx
2.反对称性:∀x,y∈A\forall x,y \in Ax,yA,若xRy,yRxxRy,yRxxRy,yRx,则x=yx=yx=y
3.传递性:∀x,y,z∈A\forall x,y,z\in Ax,y,zA,若xRy,yRzxRy,yRzxRy,yRz,则xRzxRzxRz

则称RRRAAA上的偏序关系,通常记作⪯\preceq

偏序集

偏序集合(Partially ordered set,Poset)是数学中,特别是序理论中,指配备了偏序关系的集合

设若干元素构成一个集合,那么这个集合是链当且仅当这个集合的所有元素两两可比

反链

对一个集合,它是反链当且仅当这个集合里的元素两两不可比

极大元

设偏序集AAAx∈Ax\in AxA∄y∈A,x≠y,s.t.x⪯y\not\exists y\in A,x\neq y, s.t.\ x\preceq yyA,x=y,s.t. xy,则xxx为极大元

Dilworth定理

PPP是一个有限的偏序集,则
min⁡{m∣∃链C1,C2,⋯,Cm,P=∪i=1mCi}=max⁡{∣A∣:A是反链}\min\left\{m|\exists 链C_1,C_2,\cdots,C_m,P = \cup_{i=1}^{m}C_i\right\}=\max\left\{\left|A\right|:A是反链\right\} min{m∣∃C1,C2,,Cm,P=i=1mCi}=max{A:A是反链}

偏序集能划分成的最少的链的个数与最大反链的元素个数相等

证明:
首先证明max⁡{∣A∣}≤min⁡{m}\max\left\{\left|A\right|\right\}\le \min\left\{m\right\}max{A}min{m}
假设max⁡{∣A∣}>min⁡{m}\max\left\{\left|A\right|\right\}> \min\left\{m\right\}max{A}>min{m}
存在∃x,y∈A,s.t.x,y∈Ci\exists x,y \in A,s.t.\ x,y\in C_ix,yA,s.t. x,yCi
说明x,yx,yx,y是可比的,与反链定义矛盾

同时我们也可以得出∣Ci∩A∣=1\left|C_i\cap A\right| = 1CiA=1

接着我们对∣P∣\left|P\right|P进行归纳,来证明可以取等
∣P∣=0,1\left|P\right| = 0,1P=0,1时,显然成立
假设∣P∣=k\left|P\right| = kP=k时成立
∣P∣=k+1\left|P\right| = k + 1P=k+1
设最大反链长度是mmm
最长的链是C={x1,x2,⋯,xp}C=\left\{x_1,x_2,\cdots, x_p\right\}C={x1,x2,,xp},满足x1⪯x2⪯⋯⪯xpx_1 \preceq x_2\preceq \cdots \preceq x_px1x2xp
换句话说我们不能再往CCC中增加元素,也可以得出xpx_pxp是极大元

接下来分类讨论
P\CP\backslash CP\C的每一条反链都的元素个数≤m−1\le m-1m1
由于∣P\C∣<k\left|P\backslash C\right| <kP\C<k,由归纳P\CP\backslash CP\C可以划分为m−1m-1m1个链,即P\C=∪i=1mCiP\backslash C = \cup_{i=1}^{m}C_iP\C=i=1mCi
那么PPP可以划分为P=C∪∪i=1mCiP = C\cup \cup_{i=1}^{m}C_iP=Ci=1mCi,结论成立

P\CP\backslash CP\C中存在反链A={a1,a2,⋯,am}A = \left\{a_1,a_2,\cdots,a_m\right\}A={a1,a2,,am}


P−={x∈P∣∃i,x⪯ai}P+={x∈P∣∃i,ai⪯x}P^{-} = \left\{x\in P\mid \exists i ,x \preceq a_i\right\}\\ P^{+} = \left\{x\in P\mid \exists i ,a_i\preceq x\right\}\\ P={xPi,xai}P+={xPi,aix}

我们可以得出
1.P=P−∪P+P = P^{-} \cup P^{+}P=PP+(否则存在元素与反链中的元素不可比,则这条反链不是最大的,矛盾)
2.P−∩P+=AP^{-}\cap P^{+} = APP+=A (因为ai⪯aia_i \preceq a_iaiai,所以ai∈P−,ai∈P+a_i \in P^{-},a_i \in P^{+}aiP,aiP+
3.xp∉P−x_p \notin P^{-}xp/P(反则xpx_pxp不是极大元)

AAAP−P^{-}P的一条最大反链,由归纳P−P^{-}P可以划分为mmm条链C1−1,C2−,⋯,Cm−C_1^{-1},C_2^{-},\cdots, C_m^{-}C11,C2,,Cm
由于∣A∩Ci−∣=1\left|A\cap C_i^{-}\right| = 1ACi=1,不妨假设ai∈Ci−a_i \in C_i^{-}aiCi
我们可以得出,aia_iaiCi−C_i^{-}Ci的最大元
(否则,不妨假设x∈Ci−x\in C_i^{-}xCi满足ai⪯xa_i \preceq xaix,由于x∈P−x \in P^{-}xP∃aj,s.t.x⪯aj(ai≠aj)\exists a_j,s.t.\ x\preceq a_j(a_i\neq a_j)aj,s.t. xaj(ai=aj),进而ai⪯x⪯aja_i \preceq x \preceq a_jaixaj,与反链定义矛盾)

同理P+P^{+}P+也可以划分为C1+,C2+,⋯,Cm+C_1^{+},C_2^{+},\cdots,C_m^{+}C1+,C2+,,Cm+aia_iaiCi+C_i^+Ci+的极小元
Ci=Ci−∪Ci+C_i = C_i^{-} \cup C_i^+Ci=CiCi+,则PPP可以划分为C1,C2,⋯,CmC_1, C_2,\cdots, C_mC1,C2,,Cmmmm条链
得证

洛谷P1020

最长不上升子序列
A=[a1,a2,⋯,an]A= [a_1,a_2,\cdots, a_n]A=[a1,a2,,an]
定义偏序关系ai⪯aj⇔i≤j且ai≥aja_i \preceq a_j \Leftrightarrow i\le j 且 a_i \ge a_jaiajijaiaj(容易验证满足偏序关系)

这个偏序关系就对应了最长不上升序列
最长不上升序列就是在求最长的链
划分最长不上升序列的个数最少为最长上升子序列长度

#include<cstdio>
#include<algorithm>
#include<functional>const int N = 1e5 + 5;int dp1[N];
int dp2[N];int main() {bool flag = false;int t, idx, ans1 = 1, ans2 = 1;while (~scanf("%d", &t)) {if (!flag) {flag = true;dp1[1] = dp2[1] = t;continue;}if (dp1[ans1] >= t) {++ans1;dp1[ans1] = t;}else {int idx = std::upper_bound(dp1 + 1, dp1 + 1 + ans1, t, std::greater<int>()) - dp1;dp1[idx] = t;}if (t > dp2[ans2]) {++ans2;dp2[ans2] = t;}else {int idx = std::lower_bound(dp2 + 1, dp2 + 1 + ans2, t) - dp2;dp2[idx] = t;}}printf("%d\n%d\n", ans1, ans2);return 0;
}

https://www.cnblogs.com/itlqs/p/6636222.html
https://cmwqf.github.io/2019/12/17/%E6%B5%85%E8%B0%88Dilworth%E5%AE%9A%E7%90%86/
https://www.math.cmu.edu/~af1p/Teaching/Combinatorics/F03/Class14.pdf

http://www.lryc.cn/news/14756.html

相关文章:

  • 使用loading动画让你的条件渲染页面更高级
  • Renegade:基于MPC+Bulletproofs构建的anonymous DEX
  • 二、Plugin The chain/event/query function
  • 了解 PostgreSQL 的扩展查询协议
  • 接入网关和隔离网关
  • 实用指南:如何在Anolis OS上轻松使用 Kata 安全容器?
  • 如何锁定Word文档部分文字不被修改
  • 聊聊8万8的私董会,很扎心
  • 卷积网络与全连接网络的区别
  • 【5000左右电脑配置清单】预算不高于5000,不带显示器的电脑配置清单推荐
  • 在 4G 内存的机器上,申请 8G 内存会怎么样?
  • JavaSE学习day9 集合(基础班结束)
  • Python爬虫进阶 - win和linux下selenium使用代理
  • 力扣-从不订购的客户
  • 速来!掘金数据时代2022年度隐私计算评选活动火热报名中!
  • Springboot @Test 给Controller接口 写 单元测试
  • ISO 6721-1~12 ,塑料-电动机械性能的测定,2022更新
  • vue3.2中使用swiper缩略图轮播教程
  • 边玩边学,13个 Python 小游戏真有趣啊(含源码)
  • MySQL数据文件迁移(不关闭SELinux)
  • uboot / linux添加/去除 版本号LOCALVERSION
  • 2023北京养老展,北京养老展会,北京养老产业展览会
  • 华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】
  • 带你彻底了解浮点型数据的存储
  • 【牛客刷题专栏】0x0C:JZ4 二维数组中的查找(C语言编程题)
  • 「mysql是怎样运行的」第5章 盛放记录的大盒子---InnoDB数据页结构
  • 模电中的负反馈
  • eclipse中整理左侧项目栏文件
  • IDEA性能优化设置(解决卡顿问题)修改内存
  • Android ABI