1. 程式人生 > >二分圖相關定理及其證明(最小點覆蓋+最小路徑覆蓋+最大獨立集+最小覆蓋集)

二分圖相關定理及其證明(最小點覆蓋+最小路徑覆蓋+最大獨立集+最小覆蓋集)

①最小路徑覆蓋:

給定有向圖G=(V,E)。設P 是G 的一個簡單路(頂點不相交)的集合。如果V 中每個頂點恰好在P 的一條路上,則稱P是G 的一個路徑覆蓋。P 中路徑可以從V 的任何一個頂點開始,長度也是任意的,特別地,可以為0。G 的最小路徑覆蓋是G 的所含路徑條數最少的路徑覆蓋。

路徑覆蓋和二分圖匹配的關係:

最小路徑覆蓋=|G|-最大匹配數

上述公式中最大匹配數是這樣來的:

對於G中每一個節點x,建立節點x1,x2。若x- >y存在邊,則x1與y2之間連一條無向邊,求這個二分圖的最大匹配數即可。

證明如下:

首先,若最大匹配數為0,則二分圖中無邊,也就是說有向圖G中不存在邊,那麼

顯然:最小路徑覆蓋=|G|-最大匹配數=|G|-0=|G|。

若此時增加一條匹配邊x1--y2,則在有向圖|G|中,x、y在同一條路徑上,最小路徑覆蓋數減少一個。

繼續增加匹配邊,每增加一條,最小路徑覆蓋數減少一個,則公式:最小路徑覆蓋=|G|-最大匹配數得證。

②最小點覆蓋

二分圖中,選取最少的點數,使這些點和所有的邊都有關聯(把所有的邊的覆蓋),叫做最小點覆蓋。

最小點覆蓋數 = 最大匹配數

假如我們已經通過匈牙利演算法求出了最大匹配(假設它等於M),下面給出的方法

以告訴我們,選哪M個點可以覆蓋所有的邊

    匈牙利演算法需要我們從右邊的某個沒有匹配的點,走出一條使得“一條沒被匹

配、一條已經匹配過,再下一條又沒匹配這樣交替地出現”的路(交錯軌,增廣

路)。但 是,現在我們已經找到了最大匹配,已經不存在這樣的路了。換句話

說,我們能尋找到很多可能的增廣路,但最後都以找不到“終點是還沒有匹配過的

點”而失敗。我們給所有這樣的點打上記號:從右邊的所有沒有匹配過的點出發,

按照增廣路的“交替出現”的要求可以走到的所有點(最後走出的路徑是很多條不完

整的增廣路)。那麼些點組成了最小覆蓋點集:右邊所有沒有打上記號的點,加

上左邊已經有記號的點  

看圖,右圖中展示了兩條這樣的路徑,標記了一共6個點(用 “√”表示)。那麼,

紅色圈起來的三個點就是我們的最小覆蓋點集。

    首先,為什麼這樣得到的點集點的個數恰好有M個呢?答案很簡單,因為每個點

是某個匹配邊的其中一個端點。如果右邊的哪個點是沒有匹配過的,那麼它早就

當成起點被標記了;如果左邊的哪個點是沒有匹配過的,那就走不到它那裡去

(否則就到了一條完整的增廣路)。而一個匹配邊又不可能左端點是標記了的,

同時右端點是 沒標記的(不然的話右邊的點就可以經過這條邊到達了)。因此,

最後我們圈起來的點與匹配邊一一對應。

    其次,為什麼這樣得到的點集可以覆蓋所有的邊呢?答案同樣簡單。不可能存在

某一條邊,它的左端點是沒有標記的,而右端點是有標記的。原因如下:如果這條

不屬於我們的匹配邊,那麼左端點就可以通過這條邊到達(從而得到標記);如

果這條邊屬於我們的匹配邊,那麼右端點不可能是一條路徑的起點,於是它的標記

只能是從這條邊的左端點過來的(想想匹配的定義),左端點就應該有標記。

    最後,為什麼這是最小的點覆蓋集呢?這當然是最小的,不可能有比M還小的點

蓋集了,因為要覆蓋這M條匹配邊至少就需要M個點(再次回到匹配的定義)。

③最大獨立集=總數-最小覆蓋集證明:

(摘自:http://m.blog.csdn.NET/article/details?id=50011363)


上圖,我們用兩個紅色的點覆蓋了所有邊。我們證明的前提條件是已經達到最小覆蓋。

即條件1.已經覆蓋所有邊,條件2.所用的點數最小

首先我們來證明藍色點組成的是一個獨立集:如果有兩個藍色點間有邊相連,那麼這條

邊則沒有被覆蓋,則與條件1矛盾。因此是獨立集。

再來證明這個獨立集最大: 如果我們要再增加這個獨立集中的點,則需要把某個紅點變

成藍點。而由最小覆蓋數=最大匹配數的證明我們知道,每一個紅點是最大匹配中的一

個匹配點,也就是說每個紅點至少連線了一條邊。因此當我們將某個紅點變成藍點

時,我們需要犧牲的藍點的個數是大於等於1的。也就是說,我們最多隻能找到數量相等

的其他獨立集,而無法找到數量更大的。因此藍色點集必定為最大獨立集。 藍色點數 =

總點數 - 紅色點數,即最大獨立集=總數-最小覆蓋集

由上述定理,同理可知:

最大獨立集+最小點權覆蓋=總權值。

 又∵最小點權覆蓋=最小割

    ∴最大獨立集=最小割。

下篇文章我會寫bzoj1475,求最大獨立集例題。