מבני נתונים ואלגוריתמים - מחברת קורס/גרפים/אלגוריתמי זרימה
דף זו הוא השלישי (מתוך שלשה דפים) העוסק באלגוריתמים למציאת זרימת המקסימום בגרף מכוון המתאר "רשת
צינורות". בדפים הקודמים מצאנו תנאים (מספיקים והכרחיים) למציאת זרימה מקסימלית. בדף זה נעסוק בשיטות ואלגוריתמים
המשתמשים בתנאים אלה כדי למצוא זרימה מקסימלית.
כדאי לדעת: נחלק את החומר שנלמד בזרימה לשלשה חלקים:
|
כדאי לדעת: #בזרימה - הגדרות, תוכל למצוא מימוש C++ לאלגוריתמי זרימה.
|
שיטת Ford-Fulkerson
[עריכה]שיטת Ford-Fulkerson מתבססת על הרעיונות הבאים:
- מסלולים משפרים מאפשרים למעשה לקבוע את זרימת המקסימום:
- ראינו בגודל זרימה ומסלולים משפרים שכל עוד מוצאים מסלול משפר בגרף הרשת השיורית, אפשר לשפר את הזרימה.
- ראינו בזרימה וחתכי S-T שאם אי אפשר למצוא מסלול משפר בגרף הרשת השיורית, אי אפשר לשפר את הזרימה.
- קל לבנות את הרשת השיורית ולמצוא מסלול בה (או לחלופין, להיווכח שאין מסלול כזה). אם כי לא נתעמק בזאת, לא קשה לראות שאפשר לעשות זאת בסיבוכיות .שתי נקודות אלו מובילות לרעיון הבא, הידוע כשיטת Ford -Fulkerson:
הגדרה: שיטת Ford-Fulkerson בהינתן רשת הזרימה:
|
כדאי לדעת: בקורס נלמד מספר אלגוריתמים (ודמויי אלגוריתמים) למציאת זרימה מקסימלית בעזרת מציאת מסלול משפר ברשת השיורית.
|
אלגוריתם Ford-Fulkerson
[עריכה]אלגוריתם Ford-Fulkerson הוא פחות-או-יותר שיטת Ford-Fulkerson בהקשר רשתות זרימה שבהן הקיבולים הם מספרים שלמים:
הגדרה: (אלגוריתם Ford-Fulkerson) בהינתן רשת הזרימה:
|
בניגוד למקרה הכללי, כאן (כשהקיבולים הם מספרים שלמים), קל-יחסית להראות שהאלגוריתם אכן עובד, ולנתח את סיבוכיותו:
משפט: נניח שברשת הזרימה, גודל זרימת המקסימום הוא . אז אלגוריתם Ford-Fulkerson עובד בזמן . |
הוכחה: היות שהקיבולים שלמים, אם יש מסלול שיפור ברשת השיורית, גודל הזרימה יגדל ב1 (לפחות). היות שגודל זרימת המקסימום
הוא (על פי הגדרתנו), אז לאחר שיפורים, נגיע בהכרח לזרימת מקסימום. זה מראה שהאלגוריתם עובד. הזכרנו מקודם
שמציאת מסלול שיפור אורכת , ומכאן הסיבוכיות.
אלגוריתם Edmonds-Karp
[עריכה]אלגוריתם Edmonds-Karp הוא פחות-או-יותר שיטת Ford-Fulkerson, אך תוך ציון כיצד יש לבחור מסלול שיפור בגרף הרשת השיורית:
הגדרה: (אלגוריתם Edmonds-Karp) בהינתן רשת הזרימה:
|
שימו לב: בניגוד לאלגוריתם Ford-Fulkerson, אלגוריתם זה עובד גם על רשתות זרימה שקיבוליהן אינן מספרים שלמים. |
משפט: אלגוריתם Edmonds-Karp עובד בזמן . |
להלן "הוכחת נפנופי-ידיים":
הוכחה: אם בוחרים בכל פעם את המסלול הקצר ביותר כמסלול השיפור בגרף הרשת השיורית (בלי קשר לצורה בה זה נעשה), אפשר להראות
שיש לכל היותר שיפורים סה"כ.
מצד שני, בלי קשר למספר השיפורים, אפשר להראות שבניית גרף הרשת השיורית, והרצת BFS עליו - אורכות זמן.
הסיבוכיות נובעת משילוב שתי הנקודות.
הפרק הקודם: זרימה שיורית וחתכים |
אלגוריתמי זרימה תרגילים |
הפרק הבא: נספחים |