האלגוריתם ההונגרי

האלגוריתם ההונגרי הוא אלגוריתם אופטימיזציה שפותר את בעיית ההשמה בזמן פולינומי. הוא פותח ופורסם ב-1955 על ידי הרולד קון(אנ'), שנתן לאלגוריתם את השם "השיטה ההונגרית" משום שהוא התבסס במידה רבה על עבודה קודמת של שני מתמטיקאים הונגריים: דנס קוניג (אנ') ויאנו איגרווארי(אנ'). המתמטיקאי ג'יימס מאנקרס (אנ') שבחן את האלגוריתם בשנת 1957, מצא שרמת הסיבוכיות שלו היא פולינומית. האלגוריתם ידוע מאז גם בשם אלגוריתם קון-מאנקרס או אלגוריתם ההשמה של מאנקרס. בשנת 2006 התגלה כי קרל גוסטב יעקובי פתר את בעיית ההשמה כבר במאה ה-19, והפתרון פורסם לאחר מותו ב-1890 בלטינית. בדוגמה פשוטה זו ישנם שלושה אחים: אפרים, מאיר וישראל. אחד מהם צריך לנקות את חדר השינה, שני לטאטא את החצר ושלישי לשטוף את החלונות. כל אחד מהם דורש תשלום שונה עבור כל משימה. המטרה היא למצוא את השיבוץ שייתן את העלות הנמוכה ביותר לביצוע שלוש המשימות. את הבעיה ניתן לייצג במטריצה של עלויות העובדים לביצוע המשימות: יישום האלגוריתם ההונגרי על המטריצה ייתן את העלות המינימלית שהיא 6, עלות זו מושגת על ידי שיבוצו של אפרים לניקוי החדר, של מאיר לטאטוא החצר ושל ישראל לשטיפת החלונות. ישנן שתי דרכים לנסח את הבעיה: כמטריצה וכגרף דו-צדדי (bipartite graph). בניסוח כמטריצה אנו מקבלים מטריצת n × n {\displaystyle n\times n} לא שלילית, כאשר האלמנט בשורה i {\displaystyle i} ועמודה j {\displaystyle j} מייצג את עלות הקצאת משימה j {\displaystyle j} לעובד i {\displaystyle i} . המטרה היא לשבץ את העובדים למשימות כשלכל משימה משובץ עובד אחד וכל עובד משובץ למשימה אחת, כך שהעלות הכוללת של ביצוע כלל המשימות היא מינימלית. אם המטרה היא למצוא את המשימה שמניבה את העלות המקסימלית, ניתן לעדכן את המטריצה כדי להתאים אותה להגדרה זו על ידי החלפת כל עלות בכל תא עם העלות המקסימלית מכלל התאים פחות העלות בתא. קל לתאר את האלגוריתם גם באמצעות ניסוח הבעיה כגרף. נגדיר גרף דו-צדדי שלם בו כל קודקוד בקבוצה הראשונה מחובר לקודקוד בקבוצה השנייה G = ( S , T ; E ) {\displaystyle G=\left(S,T;E\right)} עם n {\displaystyle n} קודקודי עובדים ( S ) {\displaystyle (S)} ו- n {\displaystyle n} קודקודי עבודות ( T ) {\displaystyle (T)} . לכל קשת בקבוצת הקשתות ( E ) {\displaystyle (E)} ישנה עלות לא שלילית של c ( i , j ) {\displaystyle c(i,j)} . אנחנו רוצים למצוא שידוך עם עלות כוללת מינימלית. נתונה מטריצה של n {\displaystyle n} עובדים ומשימות המכילה את העלויות לשיבוץ עובד למשימה. שלבי האלגוריתם הם: הפחיתו את האלמנט המינימלי בכל שורה מהאלמנטים האחרים בשורה. התאים שבהם יש 0 מייצגים שיבוץ פוטנציאלי. נסו למצוא באמצעות האפסים שיבוץ חד-חד ערכי של עובדים למשימות. אם ישנו שיבוץ חד-חד ערכי, זהו השיבוץ האופטימלי. אם לא, המשיכו ל-2. הפחיתו את האלמנט המינימלי בכל עמודה מהאלמנטים האחרים בעמודה. נסו למצוא באמצעות האפסים שיבוץ חד-חד ערכי של עובדים למשימות. אם ישנו שיבוץ חד-חד ערכי, זהו השיבוץ האופטימלי. אם לא, המשיכו ל-3. העבירו מספר קווים מינימלי (האלגוריתם למציאת מספר הקווים המינימלי מופיע בהמשך) על האפסים. את האלמנט המינימלי שלא מכוסה, הוסיפו לצמתי קווים והחסירו מהלא מכוסים. נסו למצוא באמצעות האפסים שיבוץ חד-חד ערכי של עובדים למשימות. אם ישנו שיבוץ חד-חד ערכי, זהו השיבוץ האופטימלי. אם לא, חזרו על 3 עד למציאת שיבוץ אופטימלי. סמנו את השורות שללא שיבוץ. סמנו את העמודות שלהן אפסים בשורות מסומנות. סמנו את השורות עם שיבוץ בעמודות מסומנות. חזרו על שלבים 2–3 עד שאין שינוי. כסו בקווים את העמודות המסומנות ואת השורות הלא מסומנות. נתונה מטריצת עלויות שיבוץ של 4 עובדים (j1, j2, j3, j4) ל-4 משימות (m1, m2, m3, m4). מצאו את השיבוץ שיביא את סך העלויות למינימום. אין שיבוץ חד-חד ערכי (למשימה 3 משובצים שני עובדים ואין שיבוץ למשימה 4) אין שיבוץ חד-חד ערכי (עובדים 1 ו-3 משובצים לאותה משימה ללא אפשרות אחרת) אין יותר עמודות שלהן אפסים בשורות מסומנות. נסמן את המחיקות בצהוב. את האלמנט המינימלי שלא מכוסה (6), מוסיפים לצמתים ומחסירים מהלא מכוסים: כעת ישנו שיבוץ חד-חד ערכי ולכן אין צורך לחזור על שלב 3. השיבוץ והעלויות (מהמטריצה ההתחלתית): את j1 נשבץ ל-m3 בעלות של 69 את j2 נשבץ ל-m2 בעלות של 37 את j3 נשבץ ל-m1 בעלות של 11 את j4 נשבץ ל-m4 בעלות של 23 סך העלות: 140 H. W. Kuhn, The Hungarian method for the assignment problem, Naval Research Logistics 52, 2005-2, עמ' 7–21 doi: 10.1002/nav.20053 H. W. Kuhn, Variants of the hungarian method for assignment problems, Naval Research Logistics Quarterly 3, 1956-12, עמ' 253–258 doi: 10.1002/nav.3800030404 James Munkres, Algorithms for the Assignment and Transportation Problems, Journal of the Society for Industrial and Applied Mathematics 5, 1957-3, עמ' 32–38 doi: 10.1137/0105003 Jacobi's bound, www.lix.polytechnique.fr ערך זה הוא יתום, כלומר אין ערכים בוויקיפדיה שמקשרים אליו. אתם מוזמנים לתרום לוויקיפדיה ולקשר אליו מכמה מהערכים שמכילים את המונח "האלגוריתם ההונגרי".