若是你看不清楚第二個字母,下面有一個大號字體版本:
二分圖最大匹配的König定理及其證實
本文將是這一系列裏最短的一篇,由於我只打算把König定理證了,其它的廢話一律沒有。
如下五個問題我可能會在之後的文章裏說,若是你如今很想知道的話,網上去找找答案:
1. 什麼是二分圖;
2. 什麼是二分圖的匹配;
3. 什麼是匈牙利算法;(http://www.matrix67.com/blog/article.asp?id=41)
4. König定理證到了有什麼用;
5. 爲何o上面有兩個點。
König定理是一個二分圖中很重要的定理,它的意思是,一個二分圖中的最大匹配數等於這個圖中的最小點覆蓋數。若是你還不知道什麼是最小點覆蓋,我也在這裏說一下:假如選了一個點就至關於覆蓋了以它爲端點的全部邊,你須要選擇最少的點來覆蓋全部的邊。好比,下面這個圖中的最大匹配和最小點覆蓋已分別用藍色和紅色標註。它們都等於3。這個定理相信大多數人都知道,可是網絡上給出的證實並很少見。有一些網上常見的「證實」明顯是錯誤的。所以,我在這裏寫一下這個定理的證實,但願對你們有所幫助。
假如咱們已經經過匈牙利算法求出了最大匹配(假設它等於M),下面給出的方法能夠告訴咱們,選哪M個點能夠覆蓋全部的邊。
匈牙利算法須要咱們從右邊的某個沒有匹配的點,走出一條使得「一條沒被匹配、一條已經匹配過,再下一條又沒匹配這樣交替地出現」的路(交錯軌,增廣路)。可是,如今咱們已經找到了最大匹配,已經不存在這樣的路了。換句話說,咱們能尋找到不少可能的增廣路,但最後都以找不到「終點是尚未匹配過的點」而失敗。咱們給全部這樣的點打上記號:從右邊的全部沒有匹配過的點出發,按照增廣路的「交替出現」的要求能夠走到的全部點(最後走出的路徑是不少條不完整的增廣路)。那麼這些點組成了最小覆蓋點集:右邊全部沒有打上記號的點,加上左邊已經有記號的點。看圖,右圖中展現了兩條這樣的路徑,標記了一共6個點(用 「√」表示)。那麼,用紅色圈起來的三個點就是咱們的最小覆蓋點集。
首先,爲何這樣獲得的點集點的個數剛好有M個呢?答案很簡單,由於每一個點都是某個匹配邊的其中一個端點。若是右邊的哪一個點是沒有匹配過的,那麼它早就當成起點被標記了;若是左邊的哪一個點是沒有匹配過的,那就走不到它那裏去(不然就找到了一條完整的增廣路)。而一個匹配邊又不可能左端點是標記了的,同時右端點是沒標記的(否則的話右邊的點就能夠通過這條邊到達了)。所以,最後咱們圈起來的點與匹配邊一一對應。
其次,爲何這樣獲得的點集能夠覆蓋全部的邊呢?答案一樣簡單。不可能存在某一條邊,它的左端點是沒有標記的,而右端點是有標記的。緣由以下:若是這條邊不屬於咱們的匹配邊,那麼左端點就能夠經過這條邊到達(從而獲得標記);若是這條邊屬於咱們的匹配邊,那麼右端點不多是一條路徑的起點,因而它的標記只能是從這條邊的左端點過來的(想一想匹配的定義),左端點就應該有標記。
最後,爲何這是最小的點覆蓋集呢?這固然是最小的,不可能有比M還小的點覆蓋集了,由於要覆蓋這M條匹配邊至少就須要M個點(再次回到匹配的定義)。
證完了。
Matrix67原創
作人要厚到 轉貼請註明出處算法