Dilworth定理
偏序关系
设RRR是集合AAA的一个二元关系,若RRR满足:
1.自反性:∀x∈A\forall x \in A∀x∈A,有xRxxRxxRx
2.反对称性:∀x,y∈A\forall x,y \in A∀x,y∈A,若xRy,yRxxRy,yRxxRy,yRx,则x=yx=yx=y
3.传递性:∀x,y,z∈A\forall x,y,z\in A∀x,y,z∈A,若xRy,yRzxRy,yRzxRy,yRz,则xRzxRzxRz
则称RRR为AAA上的偏序关系,通常记作⪯\preceq⪯
偏序集
偏序集合(Partially ordered set,Poset)是数学中,特别是序理论中,指配备了偏序关系的集合
链
设若干元素构成一个集合,那么这个集合是链当且仅当这个集合的所有元素两两可比
反链
对一个集合,它是反链当且仅当这个集合里的元素两两不可比
极大元
设偏序集AAA,x∈Ax\in Ax∈A,∄y∈A,x≠y,s.t.x⪯y\not\exists y\in A,x\neq y, s.t.\ x\preceq y∃y∈A,x=y,s.t. x⪯y,则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_i∃x,y∈A,s.t. x,y∈Ci
说明x,yx,yx,y是可比的,与反链定义矛盾
同时我们也可以得出∣Ci∩A∣=1\left|C_i\cap A\right| = 1∣Ci∩A∣=1
接着我们对∣P∣\left|P\right|∣P∣进行归纳,来证明可以取等
当∣P∣=0,1\left|P\right| = 0,1∣P∣=0,1时,显然成立
假设∣P∣=k\left|P\right| = k∣P∣=k时成立
当∣P∣=k+1\left|P\right| = k + 1∣P∣=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_px1⪯x2⪯⋯⪯xp
换句话说我们不能再往CCC中增加元素,也可以得出xpx_pxp是极大元
接下来分类讨论
当P\CP\backslash CP\C的每一条反链都的元素个数≤m−1\le m-1≤m−1
由于∣P\C∣<k\left|P\backslash C\right| <k∣P\C∣<k,由归纳P\CP\backslash CP\C可以划分为m−1m-1m−1个链,即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=C∪∪i=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−={x∈P∣∃i,x⪯ai}P+={x∈P∣∃i,ai⪯x}
我们可以得出
1.P=P−∪P+P = P^{-} \cup P^{+}P=P−∪P+(否则存在元素与反链中的元素不可比,则这条反链不是最大的,矛盾)
2.P−∩P+=AP^{-}\cap P^{+} = AP−∩P+=A (因为ai⪯aia_i \preceq a_iai⪯ai,所以ai∈P−,ai∈P+a_i \in P^{-},a_i \in P^{+}ai∈P−,ai∈P+)
3.xp∉P−x_p \notin P^{-}xp∈/P−(反则xpx_pxp不是极大元)
AAA是P−P^{-}P−的一条最大反链,由归纳P−P^{-}P−可以划分为mmm条链C1−1,C2−,⋯,Cm−C_1^{-1},C_2^{-},\cdots, C_m^{-}C1−1,C2−,⋯,Cm−
由于∣A∩Ci−∣=1\left|A\cap C_i^{-}\right| = 1A∩Ci−=1,不妨假设ai∈Ci−a_i \in C_i^{-}ai∈Ci−
我们可以得出,aia_iai是Ci−C_i^{-}Ci−的最大元
(否则,不妨假设x∈Ci−x\in C_i^{-}x∈Ci−满足ai⪯xa_i \preceq xai⪯x,由于x∈P−x \in P^{-}x∈P−,∃aj,s.t.x⪯aj(ai≠aj)\exists a_j,s.t.\ x\preceq a_j(a_i\neq a_j)∃aj,s.t. x⪯aj(ai=aj),进而ai⪯x⪯aja_i \preceq x \preceq a_jai⪯x⪯aj,与反链定义矛盾)
同理P+P^{+}P+也可以划分为C1+,C2+,⋯,Cm+C_1^{+},C_2^{+},\cdots,C_m^{+}C1+,C2+,⋯,Cm+,aia_iai是Ci+C_i^+Ci+的极小元
令Ci=Ci−∪Ci+C_i = C_i^{-} \cup C_i^+Ci=Ci−∪Ci+,则PPP可以划分为C1,C2,⋯,CmC_1, C_2,\cdots, C_mC1,C2,⋯,Cm这mmm条链
得证
洛谷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_jai⪯aj⇔i≤j且ai≥aj(容易验证满足偏序关系)
这个偏序关系就对应了最长不上升序列
最长不上升序列就是在求最长的链
划分最长不上升序列的个数最少为最长上升子序列长度
#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