勵志

勵志人生知識庫

匈牙利算法

匈牙利算法是一種組合最佳化算法,主要用於求解指派問題,即找到最小成本完成任務分配的問題。該算法在多項式時間內運行,其時間複雜度為O(N^3)。匈牙利算法的提出和命名歸功於兩位匈牙利數學家的工作:

1955年,W.W.Kuhn基於D.Kőnig的定理構造了這個算法。

1965年,Edmonds提出了該算法的一個改進版本,這個版本更為高效。

匈牙利算法的核心步驟包括:

減去行最小值和減去列最小值:對成本矩陣(也稱為指派問題的係數矩陣)的每一行和每一列減去該行或該列的最小值。

覆蓋所有零元素:使用最少的水平和垂直線來覆蓋矩陣中所有的零元素。如果需要的線條數量等於矩陣的大小N,則這些零元素構成了一個最優解。

創建額外的零元素:如果在上一步中使用的線條數量小於N,則在未被線條覆蓋的行和列中找到最小元素k,並從所有元素中減去這個k,同時對被線條覆蓋兩次的元素加上k。

匈牙利算法不僅限於求解指派問題,它也被廣泛套用於其他領域,如二分圖的最大匹配問題。