簡體   English   中英

匈牙利算法(也是 Munkres 的分配算法)

[英]The Hungarian Algorithm (Also Munkres' Assignment Algorithm)

我最近偶然發現了這個算法,我很難向自己解釋它。 該算法解決了 O(n 4 ) 中的分配問題(顯然可以改進為 O(n 3 )),但我不明白為什么。

直觀地說,我可以看到該算法往往會找到最佳解決方案,但我看不到證據。 到目前為止,我看到的所有證明都包含我不熟悉的符號:我的問題是? 任何人都可以嚴格而簡單地解釋它嗎?

我已經明白問題可以轉移到一個值矩陣,其中必須選擇每一行和每一列中的一個值。 可能的最小值(來自所選元素)和產生的選擇是算法計算的。 顯然,找到選擇也會找到最小值。


在符號方面,我正在努力的部分是here 設置部分的第三段開始“讓我們調用一個函數”......

您鏈接到的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM