匈牙利演算法

2022-05-17 17:19:31 字數 1357 閱讀 6196

匈牙利演算法是解決尋找二分圖最大匹配的。 

(一)預備知識 

什麼是二分圖:二分圖又稱作二部圖,是圖論中的一種特殊模型。 設g=(v,e)是乙個無向圖,如果頂點v可分割為兩個互不相交的子集(a,b),並且圖中的每條邊(i,j)所關聯的兩個頂點i和j分別屬於這兩個不同的頂點集(i in a,j in b),則稱圖g為乙個二分圖。 

什麼是匹配:把上圖想象成3男4女搞物件(無同性戀),連線代表彼此有好感,但最終只能1夫1妻,最終的配對結果連線就是乙個匹配。匹配可以是空。 

什麼是最大匹配:在有好感的基礎上,能夠最多發展幾對。 

現在要用匈牙利演算法找出最多能發展幾對。 

[color=green][size=medium] 

匈牙利演算法是解決尋找二分圖最大匹配的。 

(二)匈牙利演算法正文: 

匈牙利演算法中有個非常非常最重要的概念叫做-交錯路徑,或者叫交錯樹,指的同乙個東西。交錯路徑是這樣的。現在有乙個匹配如圖黑線所示 

則其交錯路徑為: 

交錯路徑是對於乙個匹配而言的,交錯路徑的起點和終點必須不是匹配中的點,而且匹配中的邊在交錯路徑中交替出現。 

先給乙個例子 

1、起始沒有匹配 

2、選中第乙個x點找第一跟連線 

3、選中第二個點找第二跟連線 

4、發現x3的第一條邊x3y1已經被人佔了,找出x3出發的的交錯路徑x3-y1-x1-y4,把交錯路中已在匹配上的邊x1y1從匹配中去掉,剩餘的邊x3y1 x1y4加到匹配中去 

5、同理加入x4,x5。 

匈牙利演算法可以深度有限或者廣度優先,剛才的示例是深度優先,即x3找y1,y1已經有匹配,則找交錯路。若是廣度優先,應為:x3找y1,y1有匹配,x3找y2。

**

匈牙利演算法

匈牙利演算法 edmonds演算法 步聚 1 首先用 標記x中所有的非m頂點,然後交替進行步驟 2 3 2 選取乙個剛標記 用 或在步驟 3 中用 yi 標記 過的x中頂點,例如頂點xi,如果xi與y為同一非匹配邊的兩端點,且在本步驟中y尚未被標記過,則用 xi 去標記y中頂點y。重複步驟 2 直至...

匈牙利演算法

匈牙利演算法用來解決二分圖的最大匹配問題。乙個典型的最大匹配問題的描述如下 乙個公司有n項工作,m個員工。每個員工能勝任n項工作中的幾項 0 n 工作。問題是,如何分配才能使得被處理的工作數最大。當然,如果公司裡人員很多,每項工作都有很多員工可以勝任,那麼使每項工作都有人處理的方案是顯而易見的。但遇...

匈牙利演算法

二分圖匹配的演算法,二分圖就是把圖上的點分成兩個互不相交的點集,而圖中的邊的端點只能分別屬於這兩個點集.二分圖的匹配,就是婚配問題,左邊的點集男性,右邊的點集女性,然後相互配對 一夫一妻 最大匹配就是讓好事最多.匈牙利演算法可以實現這個東西.匈牙利演算法怎麼實現的這個東西.這個比較多.如下 incl...