Hungarian algorithm 匈牙利算法

趣寫算法系列之--匈牙利算法

匈牙利算法是由匈牙利數學家Edmonds於1965年提出,因而得名。匈牙利算法是基於Hall定理中充分性證明的思想,它是部圖匹配最常見的算法,該算法的核心就是尋找增廣路徑,它是一種用增廣路徑求二分圖最大匹配的算法。

維基:

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

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

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

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

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

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




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