令S为有限的部分有序集。最大抗链的大小等于S的最小链覆盖的大小。这称为迪尔沃思定理。它以数学家Robert P. Dilworth(1950)的名字命名。
有限的部分有序集S的宽度是S中反链的最大大小。换句话说,有限的部分有序集S的宽度是覆盖S所需的最小链数,即这样的最小链数。 S的任何元素至少在一个链中。
链的定义:部分有序集合中的链是元素的子集,它们彼此可比。
反链的定义:反链是元素的子集,其中没有两个元素是可以相互比较的。
说明性示例:
Let S be the set of divisors of 30, with divisibility as the partial order.
Then the following chains cover S :
{1, 2, 6, 30}, {3, 15}, {5, 10}
And {2, 3, 5} is an antichain of length 3.
It is not immediately obvious, but the chain cover is minimal (though not unique),
and the antichain is maximal (though not unique).
So both definitions of width give 3 for this partially ordered set.
Dilworth定理的证明:
最简单的证明是通过归纳集合的大小。令d为S的最大反链的大小。证明将证明S可以被d链覆盖。基本情况是微不足道的。因此,假设对于所有小于S的集合,结果都得到了证明。
首先,如果S的两个元素都没有可比性,则S本身是一条反链,并且可以由d = | S |覆盖。链长为1的每个,因此结果成立。否则,令m为最小元素(对于所有可比z,m <= z),而M为最大元素(对于所有可比z,z <= M)。令T = S – {m,M}。如果T中最大的反链的大小<= d – 1,则T可以被d – 1条链覆盖,因此S可以被那些加上链{m,M}覆盖,并且结果将被证明为S 。
现在,假设T中最大的反链的大小为d(因为T是S的子集,所以不能更大)。将此反链称为A。
其余证明的想法是:描绘S的Hasse图,其中最大的反链由水平条组成。拿走带下的所有东西和带上的所有东西,用感应法将它们覆盖在链条上,然后将链条跨接在条带上,将链条连接在一起。
即构造两个集合
S + = {x属于S:x> = a,有些a属于A}
S – = {x属于S:x <= a,某些a属于A}
那么S + US –必须是S的全部,因为如果不是,那么A不会是S中的最大反链。而S + US – = A,因为如果x在交点中,则a <= x < = b对于某些元素a,b属于A,因此a和b在传递性上可比,因此唯一的可能性是a = b且它们都等于x。
由于m和M不在A中,因此必须满足以下情况:m不属于S +,m不属于S-,因此这两个集合都严格地小于S。归纳假设适用于两个S –和S + ,因此它们都被d链覆盖,每个链都必须恰好包含A的一个元素。将它们称为C a –和C a + 。现在,我们可以通过链C a – U {a} UC a +将这些封面缝合在一起,以获取所有S的封面。该封面有d条链,因此归纳得出结果。
代码来说明上面的示例:
最长递增子序列(LIS)的经典O(N lg N)算法可以看作是Dilworth定理的一种应用。看这里。
参考:Youtube视频