设
X
X
X是个非空集合,
X
X
X上有一个二元关系
R
R
R满足自反性、反对称性和传递性,我们就称其为偏序关系。三个性质分别指的是:
1、自反性,指
∀
a
,
(
a
,
a
)
∈
R
\forall a, (a,a)\in R
∀a,(a,a)∈R;
2、反对称性,指
(
a
,
b
)
∈
R
∧
(
b
,
a
)
∈
R
⇒
a
=
b
(a,b)\in R\land (b,a)\in R\Rightarrow a=b
(a,b)∈R∧(b,a)∈R⇒a=b;
3、传递性,指
(
a
,
b
)
∈
R
∧
(
b
,
c
)
∈
R
⇒
(
a
,
c
)
∈
R
(a,b)\in R\land (b,c)\in R\Rightarrow (a,c)\in R
(a,b)∈R∧(b,c)∈R⇒(a,c)∈R。
通常一个偏序关系,我们记为
(
X
,
≤
)
(X,\le)
(X,≤)。偏序集有很多例子,例如正整数
Z
Z
Z连同它上面的整除关系就是个偏序集,一个集合的所有子集组成的集合连同被包含关系也成为一个偏序集。
给定一个偏序集 ( X , ≤ ) (X,\le) (X,≤),若对任意 x , y x,y x,y,有 x ≤ y ∨ y ≤ x x\le y \lor y\le x x≤y∨y≤x,则称 ≤ \le ≤是一个全序关系,偏序集 ( X , ≤ ) (X,\le) (X,≤)也称为一个全序集,也称为一条链。一个偏序集 ( X , ≤ ) (X,\le) (X,≤)的子偏序集 ( X ′ , ≤ ) (X',\le) (X′,≤)如果是全序集,我们也可以称它是偏序集 ( X , ≤ ) (X,\le) (X,≤)的一条链,或者严格来讲,全序子集。如果偏序子集 ( X ′ , ≤ ) (X',\le) (X′,≤)中的元素两两不可比较,也就是说,对任意 x , y x,y x,y, x ≤ y x\le y x≤y与 y ≤ x y\le x y≤x都不成立,则称其为一条反链。
给定一个偏序集 ( X , ≤ ) (X,\le) (X,≤),其最长链的长度,称为偏序集 ( X , ≤ ) (X,\le) (X,≤)的高度;其最长反链的长度,称为偏序集 ( X , ≤ ) (X,\le) (X,≤)的宽度。
接下来介绍极大元、极小元、最大元、最小元的概念。
偏序集
(
X
,
≤
)
(X,\le)
(X,≤),如果有一个元素
x
x
x使得对于任意
a
a
a,若
x
≤
a
x\le a
x≤a则有
x
=
a
x=a
x=a,则称
x
x
x是这个偏序集的一个极大元。
如果有一个元素
x
x
x使得对于任意
a
a
a,若
a
≤
x
a\le x
a≤x则有
x
=
a
x=a
x=a,则称
x
x
x是这个偏序集的一个极小元。
如果有一个元素
x
x
x使得对于任意
a
a
a,都有
a
≤
x
a\le x
a≤x,则称
x
x
x是这个偏序集的最大元。
如果有一个元素
x
x
x使得对于任意
a
a
a,都有
x
≤
a
x\le a
x≤a,则称
x
x
x是这个偏序集的最小元。
我们可以看出,极大元的意思就是,没有比它更大的了;最大元的意思则是,它比别的所有元素都大。这两个概念是不一样的,因为一个偏序集可能有多个极大元,它们之间两两不能比较。但显而易见的是,最大元一定是极大元。反之不然,一个偏序集可能有极大元,但是没有最大元。一个偏序集如果有最大元的话,则最大元一定是唯一的。对于最小元也是一样。
接下来介绍最最重要的两个分解定理。
定理1:一个偏序集
(
X
,
≤
)
(X,\le)
(X,≤)的高度为
n
n
n,则存在划分
X
=
⋃
i
=
1
n
A
i
X=\bigcup_{i=1}^{n} A_i
X=⋃i=1nAi使得每个
A
i
A_i
Ai都是反链。
证明:数学归纳法。当
n
=
1
n=1
n=1时,说明任意两个元素都不可比较,则
X
X
X本身就是个反链,结论成立;设结论对于
n
n
n也成立。当高度为
n
+
1
n+1
n+1时,首先
X
X
X不可能划分为
n
n
n个反链,否则的话,由鸽巢原理,长度为
n
+
1
n+1
n+1的链必然有两个元素同属于一个反链,这与反链的定义是矛盾的。取
X
X
X的所有极大元组成一个集合
A
1
A_1
A1,则
A
1
≠
∅
A_1\ne \empty
A1=∅(链的最大元就是个极大元)。我们考虑
X
−
A
1
X-A_1
X−A1中的链,如果其有长度为
n
+
1
n+1
n+1的链,则其极大元必然也是
X
X
X的极大元,否则
X
X
X的高度就应该大于等于
n
+
2
n+2
n+2,矛盾。所以
X
−
A
1
X-A_1
X−A1的高度是
n
n
n,由归纳假设,其可以分解为
n
n
n个反链,连同
A
1
A_1
A1就是
n
+
1
n+1
n+1个反链,结论成立。这个证明有点BFS拓扑排序的味道,先找入度为
0
0
0的顶点,然后删掉,继续找入度为
0
0
0的顶点,依次下去。找反链的步骤也是这样,先找极大元,然后将其删掉,再继续找极大元。
定理2(Dilworth定理):设有限偏序集
(
X
,
≤
)
(X,\le)
(X,≤)的宽度为
m
m
m,则存在划分
X
=
⋃
i
=
1
m
A
i
X=\bigcup_{i=1}^{m} A_i
X=⋃i=1mAi使得每个
A
i
A_i
Ai都是链。
证明以后补。
我们来看应用:
对于一个数组
(
x
1
,
x
2
,
.
.
.
,
x
n
)
(x_1,x_2,...,x_n)
(x1,x2,...,xn),我们考虑将其分解为若干个下降子序列的并,这该如何做呢。
为了方便叙述,我们举一个例子,设数组为
A
=
(
4
,
2
,
4
,
5
,
3
,
7
)
A=(4,2,4,5,3,7)
A=(4,2,4,5,3,7),连同下标在一起,数组为
A
=
(
4
1
,
2
2
,
4
3
,
5
4
,
3
5
,
7
6
)
A=(4_1,2_2,4_3,5_4,3_5,7_6)
A=(41,22,43,54,35,76)。定义序关系为,
a
i
≤
b
j
a_i\le b_j
ai≤bj当且仅当
a
≤
b
a\le b
a≤b并且
i
≤
j
i\le j
i≤j。按照这个序关系的定义,一个数比另一个数小,当且仅当第一个数出现在第二个数左边,并且数值也更小。按照这个序关系,
A
A
A中的最长链就是
(
2
2
,
4
3
,
5
4
,
7
6
)
(2_2,4_3,5_4,7_6)
(22,43,54,76),其实也就是
A
A
A中的最长上升子序列。由分解定理,
A
A
A存在四条反链。我们考虑一下这里的反链是个什么意思。对于
A
A
A的某个反链而言,其中两个元素
a
i
a_i
ai和
b
j
b_j
bj不可比较,就意味着它们的数值大小关系和它们的下标大小关系”不对应“,换句话说,如果将它们按照下标由小到大排,那么数值就是由大到小的,也就是说,一个反链就对应了一个(严格)下降子序列。要求反链的话,就要求极大元。这里我们要求四轮极大元。
第一轮,在
(
4
1
,
2
2
,
4
3
,
5
4
,
3
5
,
7
6
)
(4_1,2_2,4_3,5_4,3_5,7_6)
(41,22,43,54,35,76)中,
7
6
7_6
76是极大元,别的都不是;
第二轮,在
(
4
1
,
2
2
,
4
3
,
5
4
,
3
5
)
(4_1,2_2,4_3,5_4,3_5)
(41,22,43,54,35)中,
3
5
3_5
35和
5
4
5_4
54都是极大元,别的都不是;
第三轮,在
(
4
1
,
2
2
,
4
3
)
(4_1,2_2,4_3)
(41,22,43)中,
4
3
4_3
43是极大元,别的都不是;
第四轮,剩下的两个数
(
4
1
,
2
2
)
(4_1,2_2)
(41,22)都是极大元。
每轮的极大元都是一个反链,所以得到的四个反链就是
(
7
6
)
,
(
5
4
,
3
5
)
,
(
4
3
)
,
(
4
1
,
2
2
)
(7_6),(5_4,3_5),(4_3),(4_1,2_2)
(76),(54,35),(43),(41,22)。我们发现,其实就是将
A
A
A拆成了四个下降子序列。由分解定理,这是
A
A
A能拆的最多的下降子序列个数了。
反过来想就是这样的,如果一道题目问,一个数组
A
A
A能分拆成的最多严格下降子序列的个数是多少,那么答案就是
A
A
A的最长(不严格)上升子序列的长度。
可以注意到,上述算法就是每次取极大元。接下来考虑求
A
A
A的四个反链的更简单的算法。算法如下:
1、设已经开了若干个反链,遇到新的数的时候,如果它比所有反链的最小值都要大于等于,那么这个数无法接到任何一个已经开的反链上去,则将它自成一个反链;
2、如果遇到的新的数可以接到某个反链后面,那么就挑最小值最小的那条反链接上去。
按照这个算法,求
A
A
A的四个反链的做法就是这样的:
遇到
4
1
4_1
41,开一个新的反链,
(
4
1
)
(4_1)
(41);
遇到
2
2
2_2
22,可以接上去,得
(
4
1
,
2
2
)
(4_1,2_2)
(41,22);
遇到
4
3
4_3
43,接不上去,开一个新反链,得
(
4
1
,
2
2
)
,
(
4
3
)
(4_1,2_2),(4_3)
(41,22),(43);
遇到
5
4
5_4
54,接不上去,开一个新反链,得
(
4
1
,
2
2
)
,
(
4
3
)
,
(
5
4
)
(4_1,2_2),(4_3),(5_4)
(41,22),(43),(54);
遇到
3
5
3_5
35,可以接到两个数上去,我们挑最小的接上去,得
(
4
1
,
2
2
)
,
(
4
3
,
3
5
)
,
(
5
4
)
(4_1,2_2),(4_3,3_5),(5_4)
(41,22),(43,35),(54);
遇到
7
6
7_6
76,接不上去,开一个新反链,得
(
4
1
,
2
2
)
,
(
4
3
,
3
5
)
,
(
5
4
)
,
(
7
6
)
(4_1,2_2),(4_3,3_5),(5_4),(7_6)
(41,22),(43,35),(54),(76)。
遍历完毕,正好得到四个反链。证明以后补。
接下来考虑严格偏序集的分解定理。
X
X
X上的一个严格偏序
R
R
R,指的是:
1、反自反性,对于任意
a
a
a,
(
a
,
a
)
∉
R
(a,a)\notin R
(a,a)∈/R;
2、非对称性,
(
a
,
b
)
∈
R
⇒
(
b
,
a
)
∉
R
(a,b)\in R\Rightarrow (b,a)\notin R
(a,b)∈R⇒(b,a)∈/R(注意,反对称性和非对称性不是一个意思。反自反性允许
(
a
,
a
)
∈
R
(a,a)\in R
(a,a)∈R,但是非对称性不允许);
3、传递性,
(
a
,
b
)
∈
R
,
(
b
,
c
)
∈
R
⇒
(
a
,
c
)
∈
R
(a,b)\in R, (b,c)\in R\Rightarrow (a,c)\in R
(a,b)∈R,(b,c)∈R⇒(a,c)∈R。
严格偏序集一般记为
(
X
,
<
)
(X,<)
(X,<)。严格偏序集里也可以定义极大、极小、最大、最小元,极大元指的是没有元素比它“大”(它自己也不比它大),最大元指的是它别的元素都大(除了它自己)。于是,严格偏序集也有链和反链的概念。由于偏序集的分解定理里并没有用到自反性和对称性,所以证明可以直接套用过来用。具体就不叙述了。