勵志

勵志人生知識庫

匈牙利算法原理

匈牙利算法(Hungarian Algorithm)是一種組合最佳化算法,用於求解指派問題(assignment problem),其時間複雜度為O(N^3)。該算法由Harold Kuhn於1955年提出,並因其基於兩位匈牙利數學家的早期研究成果而得名。

匈牙利算法的原理可以概括為以下步驟:

減去行最小值:對矩陣的每一行,找到該行的最小值,然後將該行的所有元素都減去這個最小值。

減去列最小值:對矩陣的每一列,找到該列的最小值,然後將該列的所有元素都減去這個最小值。

用最少的線覆蓋所有的零:用最少的水平線和垂直線覆蓋掉矩陣的所有零元素。如果需要的線條數等於矩陣的行列數(n),則在這些零中存在最優解,算法結束。如果需要的線條數小於n,則繼續下一步。

創建額外的零元素:在第三步的矩陣中,找到沒被線條覆蓋的行列中的最小元素k。所有沒被覆蓋的元素都減去k,被覆蓋兩次的元素加上k。

通過這些步驟,匈牙利算法能夠找到最小化代價的指派方案,即最優的任務分配方案。該算法在運籌學領域有廣泛的套用,例如在車輛追蹤、數據關聯問題中,都可以轉化為求解任務分配問題,即n項任務對應分配給n個人去做,以使完成效率最高。

匈牙利算法的核心思想是基於Hall定理的充分性證明,它通過尋找增廣路徑來求二分圖的最大匹配。算法的時間複雜度為O(v*e),其中v為左邊的個數,e為右邊的個數。