משפט זרימה מקסימלית - חתך מינימלי

בתורת הגרפים, משפט זרימה מקסימלית - חתך מינימלי (Max-flow min-cut) עוסק בזרימה המקסימלית שניתן להעביר ברשת זרימה. המשפט קובע כי כמות הזרימה המקסימלית שניתן להעביר ברשת זרימה שווה לקיבולת המקסימלית של החתך עם הקיבולת המינימלית ברשת.

המשפט הוא מקרה פרטי של הדואליות של תכנון ליניארי ומכליל את משפט מנגר הקובע כי גרף הוא k-קשיר אם ורק אם בין כל שני קודקודים בגרף קיימים k מסלולים זרים בקודקודים והוא k-קשיר-קשתות אם ורק אם בין כל שני קודקודים בגרף קיימים k מסלולים זרים בקשתות.
==תיאור פורמלי==
רשת זרימה מורכבת מגרף <math>\ G=(V,E)</math>, משני צמתים מיוחדים - המקור (Source) <math>\ s\isin V</math> והבור (Sink) <math>\ t\isin V</math>, ומפונקציית קיבול <math>\ c:V\times V\to\mathbb{R}^{+}\cup\left\{\infty\right\}</math> שמתאימה לכל זוג צמתים את כמות הזרימה המקסימלית שיכולה לעבור מהראשון שבהם אל השני (ויכולה להיות אינסופית, כלומר ללא הגבלה). אם לא קיימת קשת מ-<math>\ u</math> אל <math>\ v</math>, מניחים כי <math>\ c(u,v)=0</math>.

בהינתן רשת זרימה <math>\ G=(V,E)</math> עם פונקציית קיבול <math>\ c</math>, חתך ברשת הזרימה הוא חלוקה של צמתי הרשת לשתי קבוצות זרות <math>\ S,T</math>שאיחודן <math>V</math> כך שאחת מהן מכילה את המקור והשנייה את הבור: <math>\ s\isin S,t\isin T</math>.

קיבול של חתך מוגדר באמצעות סכום הקיבולות של הקשתות המצביעות מצומת בקבוצה <math>\ S</math> לצומת בקבוצה <math>\ T</math> (יש לשים לב שההגדרה אי-סימטרית):
: <math>\ c(S,T)=\sum_{u\isin S,v\isin T}c(u,v)</math>

חתך מינימלי של רשת זרימה הוא חתך כזה שהקיבולת שלו מינימלית מבין כל החתכים של הרשת. קיבולת החתך היא כאמור סכום הקיבולות של הקשתות החוצות את החתך, כלומר

<math>min\ \{c(S,T) : s\in S ,t\in T, S\cup T = V, S\cap T = \emptyset\}</math>

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

פונקציית זרימה <math>\ f:V\times V\to\mathbb{R}</math> מתאימה לכל זוג צמתים <math>\ (u,v)</math> את כמות הזרימה מ-<math>\ u</math> אל <math>\ v</math> (לכיוון יש חשיבות), כך שמתקיימים התנאים הבאים:
#אנטי-סימטריה: <math>\ f(u,v)=-f(v,u)</math>
#שמירה על אילוץ הקיבול: <math>\ f(u,v)\le c(u,v)</math>
#שימור הזרימה: לכל <math>\ u\ne s,t</math> מתקיים: <math>\ \sum_{v\in V}f(u,v)=0</math>

הערך של זרימה היא סך הזרימה שיוצאת מן המקור, כלומר <math>\ |f|=\sum_{v\isin V}f(s,v)</math>.

עבור רשת זרימה <math>\ G=(V,E)</math> עם פונקציית קיבול <math>\ c</math> וזרימה חוקית <math>\ f:V\times V\to\mathbb{R}</math> הגרף השיורי (residual graph) הוא רשת זרימה עם אותה קבוצת צמתים וקשתות כך שהקיבול של קשת (u,v) הוא <math>c(u,v) -f(u,v)</math>.

משפט זרימה מקסימלית - חתך מינימלי אומר כי שלושת התנאים הבאים שקולים, עבור זרימה <math>\ f</math>:

#<math>\ f</math> היא זרימה מקסימלית ברשת הזרימה.
#הגרף השיורי של רשת הזרימה עבור הזרימה <math>\ f</math> לא מכיל מסלולי שיפור.
#כמות הזרימה שווה לקיבול של חתך כלשהו: <math>\ |f|=c(S,T)</math>.

=== גרסה נוספת ===
קיימת גם גרסה של המשפט בו ערכי הזרימה הם מספרים טבעיים (integral version), כלומר המשפט נכון גם כאשר פונקציית הזרימה היא <math>\ f:V\times V\to\mathbb{N}</math>.שאר ההגדרות והדרישות על פונקציית הזרימה נותרות בעינן. ראו גם<ref></ref>

==הוכחה==
ראשית, אם <math>\ f</math> היא זרימה מקסימלית, והגרף השיורי של רשת הזרימה עבור <math>\ f</math> כן מכיל מסלולי שיפור, אז ניתן להגדיל את <math>\ f</math> על ידי העברת זרימה נוספת באחד ממסלולי השיפור, בסתירה למקסימליות <math>\ f</math>. לכן 1 גורר את 2.

כעת, אם הגרף השיורי עבור <math>\ f</math> לא מכיל מסלולי שיפור, ניתן להגדיר חתך <math>\ (S,T)</math> בצורה הבאה: <math>\ S</math> יהיה הרכיב הקשיר של הגרף השיורי שמכיל את <math>\ s</math> (כלומר, כל הצמתים שקיים מסלול מ-<math>\ s</math> אליהם בגרף השיורי) ו-<math>\ T</math> יכיל את יתר הצמתים. <math>\ T</math> מכיל את <math>\ t</math>, שכן אם היה מסלול בין <math>\ s</math> ו-<math>\ t</math> בגרף השיורי, על פי הגדרתו הוא היה מסלול שיפור.

קל לראות שקיבול החתך <math>\ (S,T)</math> שווה לכמות הזרימה: אם <math>\ u\isin S, v\isin T</math>, אז בהכרח <math>\ f(u,v)=c(u,v)</math>, שכן אם היה מתקיים <math>\ f(u,v)>c(u,v)</math> זו הייתה סתירה לאילוץ הקיבול של הזרימה, ואם היה מתקיים <math>\ f(u,v)<c(u,v)</math>, הרי שהקשת <math>\ (u,v)</math> הייתה שייכת לגרף השיורי, ועל פי הגדרת החתכים שלנו, הקשת <math>\ (u,v)</math> אינה שייכת אליו. לכן 2 גורר את 3.

הגרירה של 3 את 1 היא מיידית שכן קל להראות שהערך של כל זרימה קטן או שווה לקיבולו של כל חתך בגרף.

==ראו גם==
* בעיית זרימה

==קישורים חיצוניים==
* 

== הערות שוליים ==

זרימה מקסימלית - חתך מינימלי