飛彈攔截與Dilworth定理

2022-05-12 07:38:57 字數 3097 閱讀 2330

這兩天被dilworth、鏈和反鏈搞到頭昏腦脹,終於有點眉目,現在來總結一下。

dilworth定理說的是:對於乙個偏序集,其最少鏈劃分數等於其最長反鏈的長度。

dilworth定理的對偶定理說的是:對於乙個偏序集,其最少反鏈劃分數等於其最長鏈的長度。

dilworth定理先不證,有空再不上來,其對偶定理證明如下:

設乙個偏序集s的最少反鏈劃分數是p,最長鏈長度是r。

1.先證p≥r。這是顯然的,因為最長鏈長度是r,r個元素中的任意兩個都可以比較,因此它們必定兩兩屬於不同的反鏈,因此反鏈個數≥r,即p≥r。

2.再證r≥p。設x1=s。找出x1的所有極小元組成集合z1,將其從x1刪之,得到x2,再找出x2的所有極小元組成集合z2(特別注意z2中的任何元素a2,在x1中必然存在乙個元素a1使得a1≤a2,否則a2可以放到x1中,這與x1的選取矛盾),再將z2從x2中刪除,得到x3,……這樣一直下去,總存在乙個k使得xk不空但x(k+1)為空。這樣便得到一條鏈a1,a2,a3,……,ak,其中ai屬於xi。由於r是最長鏈長度,因此r≥k。另一方面,我們也得到了乙個反鏈劃分,即x1,x2,x3,……,xk。由於p是最少反鏈劃分,因此k≥p。因此有r≥p。證畢。

飛彈攔截問題可以重述為:對於乙個整數序列s,第一問是最長不公升子串行,第二問是求其最少的不公升序列的劃分數。

首先定義乙個偏序關係。對於s中的任意兩個數a、b,如果a的出現不晚於b,且a的值不小於b,則稱a、b滿足偏序關係,記作a≤b。特別注意有兩點:一是這個小於等於號,它是一種偏序關係,而不是數值上的小於等於;二是定義中說的是「a的出現不晚於b」,而不是「a的出現先於b」,這是因為偏序關係具有反對稱性,即a和a自身也是滿足偏序關係的。

舉個例子,數列s為:1,2,3,2,4,1,3,4。則紅色表示的3和2滿足上述定義的偏序關係,即3≤2。這樣,乙個不公升子串行即一條鏈,最長不公升子串行的長度即最長鏈的長度,根據對偶定理,即等於最少反鏈劃分數。由對偶定理的證明,我們可以每次找乙個極小元集合來得到最少的反鏈劃分。而這裡的極小元集合是這樣的a的集合:在a的前面不存在使得x≤a的x。再強調一次,這裡的小於等於號表示的是偏序關係,而不是數值大小。根據上面偏序關係的定義,可以通俗的理解為「在a的前面不存在不小於a的數」,即在a前面不存在大於等於a的數。轉換一下,不難發現,即每次貪心找一條上公升子串行!貪心過程如下,如下:

1,2,3,2,4,1,3,4

其中紅色的1,2,3,4為x1,即第一條反鏈,藍色的2,3,4為x2,綠色的1為x3。即s的最長不降序列長度為3,這可以在三條反鏈中各取乙個數獲得,譬如3,2,1。當然這個複雜度是o(n^2)的,沒必要這樣做,有更優秀的o(nlogn)演算法,這是題外話。

對於第二個問題,求的是最少不公升序列劃分,即鏈劃分,根據定理,可以轉換成求最長反鏈長度。實際上,一般情況下dilworth定理是反過來用的,即求最長反鏈長度轉換成球最少鏈劃分。這可以通過求dag的最小路徑覆蓋求得。當然這題也可以這樣做。

網上看了很多文章,說第二問可以貪心解,但到底為什麼可以貪心解,說的倒是亂七八糟。貪心解實際上是運用是dilworth定理的對偶定理的基礎上的,就像上面的證明過程2一樣,但網上很多都說貪心解是因為dilworth定理,這簡直就是胡說八道!(當然不排除我沒仔細看dilworth定理的證明過程的原因,有可能dilworth定理的證明也是貪心的,但我看過一次記得不是)

這題是可以貪心解的,但不是因為dilworth定理,更不是直接像上面一樣套用其對偶定理(如果這樣就更扯淡了)。我們重新看第二問,求的是最少不公升序列劃分,即鏈劃分,即最長反鏈長度。反鏈是什麼?就是上公升子串行,因此第二問求的是最長上公升子串行長度。如果我們把序列反過來,如s反過來後是s':4,3,1,4,2,3,2,1;即原序列的最長上公升子串行,變為s'的最長下降子串行,這是顯然的。

我們對s『重新定義乙個不嚴格的偏序關係,對於s'中的任意兩數a和b,如果a的出現早於b且a的值大於b,則定義a≤b。這裡我忽略了反對稱性,但對於此題並不影響dilworth定理的對偶定理的證明。

於是可以像上面那樣貪心了:每次選乙個極小元子集,使得裡面的每個a都滿足:在a前面不存在值大於a的數。再轉換一下,即每次貪心找一條不降序列!於是這樣乙個新「偏序」關係下的反鏈劃分:

4,3,1,4,2,3,2,1

於是其最長鏈長度為4。即s'的最長下降子串行長度為4,即原題第二問答案為4。

這個方法也可以用於pku1065。即對於反鏈也可以定義一種偏序關係使之成為另一種「鏈」。

總結一下,對於特殊情況下的鏈和反鏈問題,可以通過dilworth定理的對偶定理來求。特殊情況是什麼情況?就是存在兩個不同的偏序定義,使得在一種偏序定義下的反鏈可以構成另一種偏序定義下鏈!例如飛彈攔截,求最長不公升序列可以通過用貪心法求公升序列的個數求得,求最長下降序列可以通過用貪心法求不降序列的個數求得,真是神奇啊!!

現在想想hdu那題整除不整除的貌似也可以通過這樣來轉換?嗯過兩天有空想想。。

ps:重溫第二問,求的是最少不公升序列劃分,實際上,我們可以重新定義一種「偏序」關係,使得不公升序列在這個定義下是一條反鏈!那怎樣定義?可以這樣:反鏈的「反」就是鏈。不公升序列的定義是a出現於b前且數值上≥b;那什麼情況下不符合呢?我們可以列舉兩個限制的組合:

(1)a出現於b前且數值上a≥b

(2)a出現於b前且數值上a(3)b出現於a前且數值上b(4)b出現於a前且數值上b≥a

其中(1)即不公升序列,實際上,(4)也是不公升序列,(1)和(4)是等價的,只是把變數互換了而已!同理(2)和(3)是等價的。要使(1)和(4)是反鏈,令(2)和(3)是鏈即可,即把鏈定義成公升序列!於是不公升序列在這種定義下變成反鏈,即第二問變成求最少反鏈劃分。這裡要重新解釋一下dilworth定理的對偶定理,其貪心思想是用於求最長鏈長,即最少反鏈劃分,方法是每次找一條反鏈。一句話,就是貪心地尋找反鏈可以得到最少的反鏈劃分。於是每次找乙個極小元集(即每次貪心找乙個不公升子串行)。如下:

1,2,3,2,4,1,3,4

答案還是4!真是牛逼!

但這種方法只適用於可以定義兩種偏序關係使得一種偏序關係下的鏈是另一種偏序關係下的反鏈的情況!

飛彈攔截 二分 dilworth定理)

原題 接下來是dilworth定理 關鍵就是 如果是求下降子串行的最小劃分,相當於是求最小反鏈劃分,等於最長不下降子串行的長度。求 下降子串行的最小劃分 等於最長非下降子串行長度 確定 求非上公升子串行的最小劃分 等於最長非下降子串行長度還是等於最長上公升子串行長度?1 const int inf ...

Dilworth定理證明

設偏序集s。s能劃分成的最少的全序集的個數為k,s的最大反鏈的元素個數為m。1.先證明k m。設反鏈a 假設k2.再證明k m。用第二數學歸納法。設全序集s中有m個元素。1 當m 0和m 1時,對於命題結論顯然成立。2 假設m設x為s中的乙個極大元。考慮s s 這個偏序集。由於 s 那麼對於任意乙個...

狄爾沃斯定理(Dilworth定理)

狄爾沃斯定理 dilworth s theorem 亦稱偏序集分解定理,是關於偏序集的極大極小的定理,該定理斷言 對於任意有限偏序集,其最大反鏈中元素的數目必等於最小鏈劃分中鏈的數目。此定理的對偶形式亦真,它斷言 對於任意有限偏序集,其最長鏈中元素的數目必等於其最小反鏈劃分中反鏈的數目,由偏序集p按...