從二分圖開始到最大匹配

圖論概念

  • 圖:由頂點和頂點之間的邊組成的集合,表示爲G<V, E>,V表示的是頂點的集合,E表示的是邊的集合
  • 獨立集:圖內點集的子集,且滿足:每兩個頂點之間均不存在連邊
  • 最大獨立集:圖內頂點數量最多的獨立集
  • 覆蓋:圖內點集的子集,且滿足:能覆蓋(頂點是邊的任一個端點都視爲覆蓋邊)圖的所有邊
  • 最小覆蓋:圖內頂點數量最少的覆蓋
  • 最小覆蓋數:最小覆蓋的頂點數量
  • 匹配:圖內邊集的子集,且滿足:任意兩條邊都沒有公共頂點
  • 最大匹配:圖內邊數量最多的匹配
  • 最大匹配數:最大匹配的邊數量

二分圖

設G<V, E>是一個無向圖,如果頂點V可分割爲兩個互不相交的子集(A, B),並且圖中每條邊(i, j)的兩個頂點分別屬於兩個不同的集合(i屬於A, j屬於B),則程圖G是二分圖。

定理和推論:

  1. 無向圖G是二分圖的充要條件是:G至少有兩個頂點,且所有環的長度都爲偶數
  2. 最大獨立集頂點數量 = 圖中頂點數量 - 最小點覆蓋數
  3. 最小覆蓋數 = 最大匹配數

二分圖充要條件證明見百度百科(以邊跨集合A和B,形成環必然需要一次往返的倍數這個思路考慮)

最大獨立集頂點數量證明略(簡單思考:去掉最小覆蓋點,圖中邊自然也就不存在了)

證明最小覆蓋數等於最大匹配數

條件:

圖G<V,E>
存在點集C是最小點覆蓋,最小覆蓋數爲c
存在邊集M是最大匹配,最大匹配數爲m

求證:m = c

證明:

  1. 點集C是覆蓋,則邊集M上的任意一條邊,至少有一端點屬於C,所以m <= c (光覆蓋這些邊就需要m個點)

  2. 點集C是最小覆蓋,則有如下兩點結論:

    ​ Ⅰ. 點集中每個點都至少能找到一個點集外的點與該點連邊。如果沒有,說明該點所有邊端點都在覆蓋中,那這個點也沒必要包含了,與最小覆蓋矛盾
    ​ Ⅱ. 點集中多個點都只能選擇同一個點集外的點連邊的情況也不會出現。如果出現,說明部分點不是必要的,就不是最小覆蓋了。

    上面兩條保證了每個點都可以有一個覆蓋外的點連邊且這些連邊不包含共同頂點,所以這些連邊組成的邊集是圖G的一個匹配,所以m >= c

綜上兩點,m = c 得證

尋找最大匹配(匈牙利算法)

交錯路徑:給定圖G的一個匹配M,如果一條路徑的邊,交替出現在M中和不出現在M中,則稱爲M-交錯路徑

增廣路徑:如果一條M-交錯路徑,兩個端點都不與M中的邊關聯,則稱爲M-增廣路徑

可以使用匈牙利算法查找二分圖中的最大匹配,如圖所示,點集G<V, E>是一個二分圖,可分獨立集A和獨立集B

圖1

具體算法如下:

  1. 每次從集合A中取一個未被選取的點,查看該點覆蓋的所有邊,如果存在一條邊的另一端點(位於集合B)也未被選取,則將這兩點相連。不斷重複該過程,如同所示,第一次選擇A1和B1連線,點二次選擇A2和B3連線

    圖2圖3

  2. 如果A集合中選取的點,覆蓋的所有邊的另一端點均已被A集合上的點佔去(如上圖所示,A3覆蓋的邊A3B1的另一端點B1已經被A1佔去),則嘗試給佔去Bj(該例中爲B1)的點Ai(該例中爲A1)換一個未被佔用的點,如果又被佔用,則繼續考慮幫佔用點換一個點…(這是一個遞歸過程)。實際上,這就是一個找增廣路徑的過程,因爲要能找到這樣的更換路徑,在每次給佔用點更換連線時,首先要求佔用點有其他未連線的邊,這樣就形成了一個交替——邊未匹配過、匹配過、未匹配過、匹配過、未匹配過…(奇數次且兩端均是未匹配過)。

    如下圖所示,從A3出發,找到了一條路徑:A3->B1->A1->B3->A2->B4(已匹配過的邊顏色是紅色)

    圖4

    找到增廣路徑之後,將該條線上的紅藍色顏色對調(匹配與未匹配屬性反轉),就能找到一種總匹配數+1的匹配方式,如下圖所示

    圖5

重複1、2步,最終就能找到二分圖G的最大匹配

圖6

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章