匈牙利算法

原帖地址http://wapedia.mobi/zh/%E5%8C%88%E7%89%99%E5%88%A9%E7%AE%97%E6%B3%95

匈牙利算法匈牙利算法是衆多用於解決線性任務分配問題的算法之一,是用來解決二分圖最大匹配問題的經典算法,可以在多項式時間內解決問題,由匈牙利數學家Jack Edmonds於1965年提出。

 

目錄:
1. 問題簡介
2. 算法描述
3. 時間空間複雜度

1. 問題簡介

設G=(V,E)是一個無向圖。如頂點集V可分割爲兩個互不相交的子集V1,V2之並,並且圖中每條邊依附的兩個頂點都分屬於這兩個不同的子集。則稱圖G爲二分圖。二分圖也可記爲G=(V1,V2,E)。

給定一個二分圖G,在G的一個子圖M中,M的邊集{E}中的任意兩條邊都不依附於同一個頂點,則稱M是一個匹配。選擇這樣的子集中邊數最大的子集稱爲圖的最大匹配問題(maximal matching problem)

如果一個匹配中,圖中的每個頂點都和圖中某條邊相關聯,則稱此匹配爲完全匹配,也稱作完備完美匹配

2. 算法描述

  求最大匹配的一種顯而易見的算法是:先找出全部匹配,然後保留匹配數最多的。但是這個算法的時間複雜度爲邊數的指數級函數。因此,需要尋求一種更加高效的算法。下面介紹用增廣路求最大匹配的方法(稱作匈牙利算法,匈牙利數學家Edmonds於1965年提出)。

  增廣路的定義(也稱增廣軌交錯軌):

  若P是圖G中一條連通兩個未匹配頂點的路徑,並且屬於M的邊和不屬於M的邊(即已匹配和待匹配的邊)在P上交替出現,則稱P爲相對於M的一條增廣路徑。

  由增廣路的定義可以推出下述三個結論:

  1-P的路徑長度必定爲奇數,第一條邊和最後一條邊都不屬於M。

  2-將M和P進行異或操作(去同存異)可以得到一個更大的匹配M’。

  3-M爲G的最大匹配當且僅當不存在M的增廣路徑。

  算法輪廓:

  (1)置M爲空

  (2)找出一條增廣路徑P,通過異或操作獲得更大的匹配M’代替M

  (3)重複(2)操作直到找不出增廣路徑爲止

3. 時間空間複雜度

  時間複雜度 鄰接矩陣:最壞爲O(n^3) 鄰接表:O(mn)   空間複雜度鄰接矩陣:O(n^2) 鄰接表:O(m+n)

 

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