[英]The Hungarian Algorithm (Also Munkres' Assignment Algorithm)
您鏈接到的Wikipedia 頁面包含有關如何在矩陣上手動執行此算法的步驟。 python 實現也使用矩陣。 有時,理解算法的唯一方法是手動或在交互式控制台中逐步完成。
你可以看看 Jungnickel 的這本書,它從第 421 頁開始對匈牙利算法進行了全面的理論討論,但也給出了一個例子。 通過這個例子,你應該能夠明白為什么算法是 O(n3))。
也就是說,對於 S 和 T 中的每個 position,如果 i 處的 y 和 j 處的 y 加起來小於迄今為止為 position 計算的成本(找到最低的潛在答案),則 S 和 T 值中的 y 是一個潛在答案。
如果我沒記錯的話,這是一個動態編程問題。 一個完美的匹配是當他最便宜的價格恰好是他被選中做的事情時。
function 將圖中的每個頂點(即 S 和 T 的並集,即 U 形符號的含義)映射到有理數系統中,即 Q 由給定頂點對的不等式表示。 符號的哪一部分仍然沒有意義?
潛在的 function y 以這樣的方式為您的完整二分圖中的每個頂點分配一個數字,即來自 S(所有人的集合)的任何頂點和來自 T(所有工作的集合)的任何頂點的潛力總和是小於連接這些頂點的邊的值(因此小於做這項工作的人的成本)。 將 0 分配給每個頂點的 function 是有效潛在 function 的一個很好的例子。
勢 y 的值是所有頂點的勢之和(這是定義)。
可以看出,每一次完美匹配的代價至少是每一次勢能的價值。
這很明顯:在完美匹配中,您必須選擇沒有共同頂點的 n 條邊。 每條邊的成本都低於其頂點勢的總和(根據勢的定義)。 當您將匹配中所有邊的成本相加時,它將高於圖的潛力值。
現在,該算法計算潛在和匹配,以使它們的成本/價值相同。 因為潛力的價值是問題的最小成本的下限,所以你得到了一個最優解。
這證明了算法。 現在您需要查看它並了解它為什么以及如何找到完美匹配和具有相同成本/價值的潛力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.