מבני נתונים ואלגוריתמים - מחברת קורס/גרפים/זרימה שיורית וחתכים

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי


דף זו הוא השני משלשה העוסק באלגוריתמים למציאת זרימת המקסימום בגרף מכוון המתאר "רשת צינורות". בסוף זרימה - הגדרות ראינו כיצד להגדיר במדויק רשת זרימה, זרימה חוקית, וגודל זרימה. בדף זה נראה רעיון כללי המאפשר לנו למצא זרימה חוקית בעלת גודל מירבי בהנתן רשת זרימה.


כדאי לדעת:

נחלק את החומר שנלמד בזרימה לשלשה חלקים:


כדאי לדעת:

בספר הקורס, הפרק "Maximum Flow" (תתי פרקים 1 ו2) מכסה נושא זה.


הרשת השיורית[עריכה]

הרשת השיורית הנה רשת זרימה המתארת כמה עוד אפשר להזרים.


הגדרה[עריכה]

נניח רשת זרימה על גרף ,‏ וכן זרימה חוקית עליה . הרשת השיורית מתארת כמה עוד אפשר להזרים ישירות בין שני צמתים, ומוגדרת כך. לוקחים כל זוג צמתים , ומגדירים להם את הקיבול השיורי, המתאר כמה עוד אפשר להזרים ישירות מ ל. פורמלית: .

גרף הרשת השיורית, מורכב מצמתי הגרף המקורי, ומהקשתות שקיבוליהן השיורי חיובי. לבסוף, צומת המקור והבור הם אלה מהרשת המקורית.


הגדרה:

בהינתן רשת זרימה ,‏ ,‏ ו, וזרימה חוקית עליה , אז הרשת השיורית היא הרשת בעלת אותו הגרף וצמתי המקור והבור, והקיבולים (הנקראים קיבולים שיוריים).

מסלול משפר[עריכה]

הגדרה[עריכה]

הגדרה:

נניח שברשת שיורית יש מסלול מ ל על פני קשתות בעלי קיבול (שיורי) חיובי ממש. נאמר שהמסלול הוא מסלול משפר לזרימה ברשת המקורית.




דוגמה:

בתרשים הבא, A מראה רשת זרימה וזרימה חוקית עליה. לזרימה זו מתאימה הרשת השיורית המוצגת ב-B ‏.C מראה מסלול משפר, כלומר מסלול מ ל ברשת השיורית על פני קשתות בעלי קיבול (שיורי) חיובי ממש.

מסלול משפר.
מסלול משפר.




דוגמה:

בתרשים הבא, A מראה רשת זרימה וזרימה חוקית עליה. B מראה את הרשת השיורית. קל לראות שאין מסלול משפר מ ל ברשת השיורית, כלומר מסלול על פני קשתות בעלי קיבול (שיורי) חיובי ממש.

אין מסלול משפר ברשת השיורית.
אין מסלול משפר ברשת השיורית.


גודל זרימה ומסלולים משפרים[עריכה]

באופן לא מפתיע, מסלולים משפרים מצביעים כיצד להגביר את גודל הזרימה ברשת:



משפט:

נניח שברשת השיורית יש מסלול משפר, וקיבול המינימום בגרף השיורי לאורך המסלול הוא . אז אפשר להגדיל את הזרימה ברשת המקורית ב על ידי הזרמה נוספת במסלול המשפר.




דוגמה:

כפי שראינו, בתרשים הבא, A מראה רשת זרימה וזרימה חוקית עליה. לזרימה זו מתאימה הרשת השיורית המוצגת בB ‏.C מראה מסלול משפר, כלומר מסלול מ ל ברשת השיורית על פני קשתות בעלי קיבול (שיורי) חיובי ממש.

מסלול משפר.
מסלול משפר.

במסלול המשפר כל הקשתות בעלי קיבול (שיורי) לפחות 1, ואכן, קל להווכח שאפשר להגדיל את הזרימה בA ב1.


עד עתה ראינו שאם ברשת השיורית קיים מסלול משפר, אפשר להגדיל את הזרימה. האם הכוון ההפוך מתקיים? במילים אחרות, האם נכון בהכרח שאם ברשת השיורית אין מסלול משפר, אז אי אפשר להגדיל את הזרימה? התשובה היא כן - הכוון ההפוך גם הוא מתקיים. כדי להבין מדוע, נזדקק לחתכי S-T - מושג שכעת נראה.

חתכי S-T[עריכה]

הגדרה[עריכה]

הגדרה:

ברשת זרימה, חתך S-T הוא חלוקה של לשתי קבוצות (זרות) ו, כך ש:

  1. קשת חוצה את החתך מ ל אם ו.


הגדרה:

בחתך S-T:

  1. גודל קיבול החתך הוא סכום קיבולי הקשתות החוצות את החתך (מS לT).
  2. גודל זרימת החתך הוא סכום זרימות הקשתות החוצות את החתך (מS לT).




דוגמה:

להלן מספר חתכי S-T לרשת זרימה שכבר ראינו:

  1. A בתרשים הבא מראה את החתך . גודל קיבול החתך הוא 21, וגודל זרימת החתך הוא 3.
  2. B בתרשים הבא מראה את החתך . גודל קיבול החתך הוא 4 וגודל זרימת החתך הוא 3.
  3. C בתרשים הבא מראה את החתך .גודל קיבול החתך הוא 45 וגודל זרימת החתך הוא 3.
גודל זרימת חתך וקיבול חתך.
גודל זרימת חתך וקיבול חתך.


{{הערה|1 = חתך S-T יכול להכיל גם קשתות מצומת ב לצומת ב. חשוב להבין מההגדרות מהו קיבול החתך וזרימת החתך במקרים כאלה.




דוגמה:

להלן חתך S-T אחר לגרף מהדוגמה הקודמת. גודל קיבול החתך הוא 23, וגודל זרימת החתך הוא 4 (ודא שהנך מבין מדוע).(*גודל זרימת החתך הוא 3)

גודל זרימת חתך וקיבול חתך עם קשתות מt לs.
גודל זרימת חתך וקיבול חתך עם קשתות מt לs.


זרימה וחתכי S-T[עריכה]

ראשית נראה בשלושת המשפטים הבאים שגודל זרימת החתך מגביל את גודל הזרימה.



משפט:

לכל חתך S-T, גודל זרימת החתך הוא לכל היותר גודל קיבול החתך.




משפט:

לכל חתך S-T, גודל זרימת החתך הוא בדיוק גודל הזרימה.


להלן הוכחה של המשפט השני מבין השניים.


הוכחה: ההוכחה היא באינדוקציה על .

(בסיס האינדוקציה) כאשר הטענה ברורה, כי פשוט .

(מעבר האינדוקציה) נניח שהטענה נכונה לכל כך ש, ונראה שהיא נכונה גם לכל כך ש.

נקח חתך S-T כלשהו שבו , ונבחר איזשהו . נציין את שכניו של כך: שכניו של ב הם , ושכניו של ב הם .‏ A בתרשים הבא מראה את החתך, את , ואת שכניו (שים לב שיתכנו עוד צמתים שאינם מופיעים בתרשים). נגדיר כ את גודל זרימת החתך.

מעבר האינדוקציה.
מעבר האינדוקציה.

כעת נייצר חתך אחר, ע"י זאת שנעביר את מ ל, כמוראה בB בתרשים הקודם. נגדיר כ את גודל זרימת החתך החדש. נשים לב לשני דברים:

  1. בהכרח :
    1. מהתרשימים קל לראות שמתקיים .
    2. מזרימה הופכית אנו יודעים ש, ולכן
      .
    3. משימור הזרימה אנו יודעים ש
      .
  2. בתרשים B, בהכרח , וזאת משום שהעברנו את ל.

קל להשלים מכאן את מעבר האינדוקציה.

משילוב שני המשפטים הקודמים, קל לראות את המשפט הבא:



משפט:

לכל חתך S-T, גודל הזרימה הוא לכל היותר גודל קיבול החתך.


כזכור, רעיון החתכים נועד להוכיח את הטענה שיכולת שיפור גודל הזרימה היא בדיוק היכולת למצוא מסלול משפר בגרף השיורי. כעת נוכל להוכיח זאת (ואף יותר מכך) במשפט הבא.


כדאי לדעת:

המשפט הבא ידוע כמשפט Max-Flow Min-Cut, וייתכן מאד שהוא המשפט המפורסם ביותר בתורת הגרפים.



משפט: Max-Flow Min-Cut

הטענות הבאות שקולות:

  1. הזרימה היא בעלת גודל מירבי.
  2. אין מסלול משפר ברשת השיורית .
  3. קיים חתך S-T שבו גודל הזרימה הוא בדיוק גודל קיבול החתך.



הוכחה: כבר הראנו מקודם שאם יש מסלול משפר בגרף הרשת השיורית, אז אפשר להגדיל את גודל הזרימה.


נניח שאין מסלול משפר בגרף הרשת השיורית. נגדיר שתי קבוצות כך: מוגדרת כקבוצת הצמתים שיש מסלול מ אליהם בגרף הרשת השיורית, ו מוגדרת כשאר הצמתים - . מהבניה ברור ש, ולכן זהו חתך S-T. נניח שקיימים המקיימים . אז על פי ההגדרה, , דבר שסותר את הנחתנו ש. לכן בחתך זה, גודל קיבול החתך שווה לגודל זרימת החתך. מצד שני, הראינו מקודם שלכל חתך, גודל זרימת החתך הוא בדיוק גודל הזרימה.


כבר הראנו מקודם שלכל חתך S-T, גודל הזרימה חסום ע"י גודל קיבול החתך. לכן, אם מצאנו זרימה שגודלה הוא גודל קיבול חתך כלשהו, זו בהכרח זרימת המקסימום.


הפרק הקודם:
זרימה - הגדרות
זרימה שיורית וחתכים
תרגילים
הפרק הבא:
אלגוריתמי זרימה