Dilworth定理

Dilworth定理优化“序列的不下降子序列最少划分数”
应kAc的要求,写这篇文章。虽然告别竞赛了,但是帮助晚辈,特别是有可能成为我孙子的人,还是十分有意义的。
首先是定义。
偏序关系是满足自反性、反对称性、传递性的二元关系。可以用<=表示。
自反性:x<=x成立。
反对称性:a<=b 且 b<=a <=> a=b
传递性:a<=b 且 b<=c ==> a<=c
满足上述三条性质的二元关系是偏序关系,配备偏序关系的集合称为偏序集。
显然数集上的“小于或等于”是偏序关系,但是偏序关系不只可以在数集上。
可比:a与b可比,当且仅当a<=b 或 b<=a。
设全集U是一个偏序集。
链:U的子集,满足其中任意两个元素(不相同)可比。
反链:U的子集,满足其中任意两个元素(不相同)不可比。
比如,有限数集S上的最长链的长度等于|S|,最长反链长度为1.
将U分拆成很多子集称作划分。姑且把子集全为链的划分叫做链划分,全为反链叫反链划分。
有两个互相对偶的定理:
U的链划分使用的最少集合数,等于它的最大反链长度。(1)
U的反链划分使用的最少集合数,等于它的最大链长度。(2)
其中某一个叫做Dilworth定理……我记不清了……
如果我说的不清楚,请参阅任意一本组合数学的入门书籍。
那么,罗嗦了半天,来到那个问题:给定一个全为实数的序列,每次在其中选出一个不下降子序列并将其删掉。求删完整个序列所需要的选择子序列的次数。
比如说,1 2 4 3 5这个序列,最少要两次,第一次1 2 3 5.
虽然序列与集合不同,但这很可能与最少划分有关。不管怎么说,打算用Dilworth定理相关内容解决本题。
首先要把序列转化成集合。不同点在于序列中元素有序。考虑使用有序数对(p,v)表示原序列中的一个数。p表示位置,v表示数值。
从集合中任意取出两个元素,如何能确定前者不比后者大呢?考虑关系<=:p1<=v1&&p2<=v2。这相当于先把两个元素按照原序列中的位置排序,再比较数值大小。这个关系是偏序关系。如此一来,两个元素可比,等价于在原序列中,他们是不下降的。
根据(1),原题所求的次数,等于原序列的最长下降子序列的长度。
如果是求下降子序列的最小划分,相当于是求最小反链划分,等于最长不下降子序列的长度。
(完。请多指教。)

你可能感兴趣的:(ACM->dilworth定理)