1. 程式人生 > >【Dilworth定理】最長鏈覆蓋與最小鏈覆蓋

【Dilworth定理】最長鏈覆蓋與最小鏈覆蓋

參考部落格,作者:xuzengqiang,來源:CSDN 


首先了解一個東西:偏序關係。

偏序關係具體定義和分類

非嚴格偏序,自反偏序

【這個表示的是偏序關係,不是小於等於】

給定非空集合S,“≤”是S上的二元關係,若“≤”滿足:

  1. 自反性:∀a∈S,有a≤a;

  2. 反對稱性:∀a,b∈S,a≤b且b≤a,則a=b;

  3. 傳遞性:∀a,b,c∈S,a≤b且b≤c,則a≤c;

則稱“≤”是S上的非嚴格偏序自反偏序

嚴格偏序,反自反偏序

給定集合S,“<”是S上的二元關係,若“<”滿足:

  1. 反自反性

    :∀a∈S,有a≮a;

  2. 非對稱性:∀a,b∈S,a<b ⇒ b≮a;

  3. 傳遞性:∀a,b,c∈S,a<b且b<c,則a<c;

則稱“<”是S上的嚴格偏序反自反偏序

比方說:(A,≤)是偏序集,A={1,2,3},【偏序≤】表示在A上的【大於等於關係】。則有:≤={<3,3>,<3,2>,<3,1>,<2,2>,<2,1>,<1,1>},則有3≤2,2≤2,2≤1....

嚴格偏序與有向無環圖(dag)有直接的對應關係。一個集合上的嚴格偏序的關係圖就是一個有向無環圖。其傳遞閉包是它自己 。——【來自百度百科】


偏序關係舉例說明


舉如下例子說明偏序關係:
1、實數集上的小於關係是一個嚴格偏序。
2、設S是集合,P(S)是S的所有子集構成的集合,定義P(S)中兩個元素A≤B當且僅當A是B的子集,即A包含於B,則P(S)在這個關係下成為偏序集。
3、設N是正整數集,定義m≤n當且僅當m能整除n,不難驗證這是一個自反偏序——

【在正整數集中,任意的整數a,都滿足a|a。】

【若a|b,b|a,則a=b】

【若a|b,b|c,則a|c】

這個整除關係滿足這三條性質,它就是一個自反偏序。

例:(A,≤)是偏序集,其中A={1,2,3,4,5},其中≤是整除關係,那麼對任意的x∈p都有1≤x,所以1和1,2,3,4,5都是可比的

,但是2不能整除3,且3不能整除2,所以2和3是不可比的


極小元

偏序集中沒有與它可比較的更小的元素。設<A,R>是偏序集,  ,若不存在  ,使得 xRb 且 x≠b【R是偏序關係】,則b稱為<B,R>的極小元。對給定的<B,R>可以有一個或多個極小元,也可以沒有極小元。


鏈與反鏈

一個反鏈A是X的一個子集,它的任意兩個元素都不能進行比較。

一個鏈C是X的一個子集,它的任意兩個元素都可比。

舉個李子吧。

比如說一個上升序列,它的偏序關係就是:對於兩個數a[i],a[j],滿足i<j且a[i]<a[j]。

比如這個序列:10,2,5,7,6,3,8,它有很多的子集。【下標從1到7】

隨便取一個它的子集,比如{2,5,7,6},對於其中兩個元素7和6,因為7對應a[4],6對應a[5],它們的下標4<5,但是對應的值7>6,所以不能比較。而2和5又可以比較,因為滿足a[2]≤a[3]。那麼{2,5,7,6}這個集合既不是鏈也不是反鏈。

再隨便取一個子集,比如{2,7,8},這個集合中任意兩個元素都可比,那麼這個集合就是一個鏈。

再看這個子集,{10,7,3},這個集合中任意兩個元素都不可比,那麼它就是一個反鏈。


定理

最小鏈覆蓋數 = 最長反鏈長度

最長鏈長度 = 最小反鏈覆蓋數

下面是兩個重要定理: 
定理1 令(X,≤)是一個有限偏序集,並令r是其最大鏈的大小。則X至少被劃分成r個反鏈。 
其對偶定理稱為Dilworth定理:
定理2 令(X,≤)是一個有限偏序集,並令m是反鏈的最大的大小。則X至少被劃分成m個鏈。


證明

定理1證明:設p為最少反鏈個數


      (1)先證明X不能劃分成小於r個反鏈。 由於r是最大鏈C的大小,C中任兩個元素都可比,因此C中任兩個元素都不能屬於同一反鏈。就是C中的元素都在不同的反鏈中。所以p>=r。


      (2)設X1=X,A1是X1中的極小元的集合。那麼A1就是一個反鏈。【因為如果A1中有兩個元素a,b,它們可比較,則必有一個比另一個小,但是A1是極小元集合,矛盾。】從X1中刪除A1得到X2。注意到對於X2中任意元素a2,必存在X1中的元素a1,使得a1<=a2。【如果X1中不存在a1使得a1<=a2,那麼根據極小元定義,a2就會被算進極小元集合A1裡】令A2是X2中極小元的集合,從X2中刪除A2得到X3……最終,會有一個Xk非空而X(k+1)為空。於是A1,A2,...,Ak就是X的反鏈的劃分,同時存在鏈a1<=a2<=...<=ak,其中ai在Ai內。由於r是最長鏈大小,因此r>=k。由於X被劃分成了k個反鏈,因此r>=k>=p。因此r=p,定理1得證。


序列的劃分

如果我們把一個序列的偏序關係定義為:i<j且a[i]>=a[j]那麼它的最大鏈就是它的一個最長不上升序列【令其長度為len】,而它對應的反鏈就是上升序列。根據Dilworth定理,那麼這個序列至少被劃分成len個上升序列。

簡單總結一下,就是:

一個序列的上升序列的最少個數等於最長不上升子序列的長度。

一個序列的下降序列的最少個數等於最長不下降子序列的長度。


END

很多地方都在口胡,希望有大佬【@G21GLF】指出錯誤之處。