二分圖相關定理及其證明(最小點覆蓋+最小路徑覆蓋+最大獨立集+最小覆蓋集)
①最小路徑覆蓋:
給定有向圖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,求最大獨立集例題。