匈牙利演算法

2021-10-16 22:19:10 字數 1717 閱讀 3811

匈牙利演算法(hungarian algorithm)是一種組合優化演算法(combinatorial optimization algorithm),用於求解指派問題(assignment problem),演算法時間複雜度為o(n^3)。harold kuhn發表於2023年,由於該演算法基於兩位匈牙利數學家的早期研究成果,所以被稱作「匈牙利演算法」。

針對的翻譯內容,舉例說明匈牙利演算法。

例如有四個任務(j1, j2, j3, j4) 需要四個工人(w1, w2, w3, w4)去完成,每個工人需要完成一項任務,並且他們完成任務所需的時間是不一樣的,下面的矩陣表示每個工人完成任務所需的時間,目標是找到乙個花費時間最少的安排方案。

step 1:對於矩陣每行,減去該行最小的乙個數

例如矩陣第一行最小的元素為69,因此第一行每個元素都減去69,最後得到的矩陣如下。

step 2:對於矩陣每列,減去該列最小的乙個數

與上一步上次,不過這步針對的是列,得到的矩陣如下。

step 3:用最少的橫線或豎線覆蓋所有0元素

使用最少的直線(橫線或豎線)覆蓋矩陣中所有的0元素,上述矩陣最少可以使用三條直線覆蓋,如下圖所示。

因為最少需要的直線數目為3,小於矩陣的size,所以進行第四步。

step 4:用最少的橫線或豎線覆蓋所有0元素

首先,我們找到未覆蓋元素中最小的數為6。然後,對於每個未覆蓋的元素都減去這個數,對於每個覆蓋了兩次的元素加上這個數,得到如下的矩陣。

接著,返回step3。

step 5:用最少的橫線或豎線覆蓋所有0元素

再次使用最少的直線(橫線或豎線)覆蓋矩陣中所有的0元素,此時矩陣最少需要4條直線進行覆蓋,如下圖所示。

因為需要直線的數量(4)等於矩陣的size(4),乙個最優的匹配方案就出現了,演算法結束。

最優的匹配方案

下面為最優的安排方案(找到四個0並且它們分布在不同行和列):

最優安排對應的原始矩陣如下:

這樣,工人1完成任務3,工人2完成任務2,工人3完成任務1,工人4完成任務4。整體的時間花費為69 + 37 + 11 + 23 = 140。

匈牙利演算法

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

匈牙利演算法

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

匈牙利演算法

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