1 / 42

An O(n log 2 n) Algorithm For Maximum Flow in Undirected Planar Networks

An O(n log 2 n) Algorithm For Maximum Flow in Undirected Planar Networks. Refael Hassin and Donald B.Johnson. הגדרת הבעיה: רשת זרימה, N היא רביעיה מהצורה: ( G , s , t , c ) כאשר: G = ( V , E ) הוא גרף מישורי לא מכוון עם n צמתים. t , s є V צומת מקור וצומת יעד בהתאמה.

avi
Download Presentation

An O(n log 2 n) Algorithm For Maximum Flow in Undirected Planar Networks

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. An O(n log2 n) Algorithm For Maximum Flow in Undirected Planar Networks RefaelHassin and Donald B.Johnson

  2. הגדרת הבעיה: • רשת זרימה, N היא רביעיה מהצורה: ( G , s , t , c ) כאשר: • G = ( V , E ) הוא גרף מישורי לא מכוון עם n צמתים. • t , s є V צומת מקור וצומת יעד בהתאמה. • c: E ⟶ R⁺ פונקצית הקיבולת על הקשתות. (או למעשה נרחיב את ההגדרה ל: c: V⨉V ⟶ R⁺ כאשר c(v,w) = 0 אם אין קשת בין v ל-w) • פונקצית זרימה f:V⨉V ⟶ R⁺ היא פונקציה המקיימת שלכל e = (v-w) є E: • f(v,w) + f(w,v) ≤ c(e). • ולכל v є V-{s,t} תהי A קבוצת השכנים של v, אז: • תהי B קבוצת השכנים של הצומת t. אז ערך הזרימה: • הבעיה היא למצוא זרימה בעלת ערך מקסימלי.

  3. דרך מסובכת להציג בעיה פשוטה: רוצים להזרים כמה שיותר מים/חשמל/משהו אחר מ-s ל-t דרך הרשת המישורית N בעלת הקיבולת c. 2 2 7 7 6 1 4 5 8 2 4 10 3 5 6 6 2 9 4 2 1 1 10 9 1 4 6 4 1 8 9 10 10 8 7 7 3 9 10 8 3 6 6 t s 10 7 1 9 4 1 4 5 8 4 2 6 10 9 4 2 3 2 5 5 9 1 7 3 2 2 3

  4. סיבוכיות • האלגוריתם הכי טוב עד עכשיו בגרפים כלליים רץ בזמן O(n2 log n). • בגרף מישורי ניתן היה להגיע לתוצאה של O(n3/2 log n). • האלגוריתם הזה רץ בזמן אסימפטוטי O(n log2 n). • אבל, בחלקים מסויימים, לשם פשטות, נשתמש באלגוריתם מציאת מסלולים קצרים ביותר של Dijkstra, למרות שיש אלגוריתמים יעילים יותר. • לכן אם אנחנו משתמשים באלגוריתם shortest-path שרץ ב-O(f(n)) אז סיבוכיות האלגוריתם שלנו תהיה O(f(n) log n).

  5. Max-Flow Min-Cut Theorem • ידוע כי ערכה המכסימלי של זרימה בגרף כללי שווה לערך המינימלי של חתך המפריד בין s ל-t. • בעובדה זו השתמשו איתי ושילוח בשנת 1979 כדי למצוא זרימה מכסימלית בגרף מישורי שבו הצמתים s ו-t על אותה פאה. • חסין וג'ונסון מרחיבים אלגוריתם זה למקרה שבו s ו-t לאו דוקא על אותה פאה.

  6. הגרף הדואלי • לכל גרף מישורי יש גרף דואלי שמשמעותו החלפת כל הפאות בצמתים (כולל הפאה החיצונית) וכל הצמתים בפאות. t s

  7. בה"כ הגרף הדואלי פשוט • קשת כפולה ניתן לאחד לאחת: • לולאות ניתן למחוק: נשים לב כי פעולות אלו לא משפיעות לא על הזרימה ולא על המרחקים בגרף הדואלי. אולם במאמר פותרים זאת ע"י טריאנגולציה בקשתות עם קיבולת אפס. min(c1, c2) c1 c2

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

  9. מציאת חתך מינימלי • לכן נמצא את המסלול הקצר ביותר מהפאה של s לפאה של t (נסמן φs,φt בהתאמה). • נסמן את המסלול ב-Π ואת צמתיו ב-ξ1, ξ2, … ξk . כאשר ξs=ξ1 ξt=ξk . • נמצא את Π ע"י הוספת צומת שקשורה (במרחק אפס) לכל צומת בפאה φt וכנ"ל עבור φs, ומציאת המסלול הקצר ביותר ביניהן. φs φt Π ξ2 ξ1 ξk

  10. מציאת חתך מינימלי • נלך על פני Π מ-ξs אל ξt, ונגדיר כל קשת מהצורה(v, ξi) להיות Π-ימנית או Π-שמאלית, לפי מיקומו של v ביחס למסלול. • נשים לב כי קיים מעגל קצר ביותר שמקיף את φt ומכיל בדיוק קשת Π-ימנית אחת וקשת Π-שמאלית אחת. Π-left φs φt ξ2 ξ1 ξk Π-right

  11. אלגוריתם CUTS(N) • האלגוריתם מקבל רשת זרימה N, ואת המסלול Π בין φs ל- φt. ומחזיר קבוצה שמכילה עבור כל Π ξi є את המעגל הקצר ביותר שמכיל קשת Π-שמאלית אחת שיוצאת מ-ξi. • נסמן את הפלט של האלגוריתם { Cd1, Cd2, … ,Cdk } • איך עושים את זה?

  12. אלגוריתם CUTS(N) • נפצל את כל צמתי Π ל- ξ’iו-ξ”i. ניצור קשתות מכוונות מ- ξ”iל-ξ’i. ואת כל הקשתות הΠ-שמאליות/ימניות נכוון שמאלה. עכשיו נמצא shortest-path מ-ξ’iל-ξ”i ξ’2 ξ’1 ξ’k ξ”2 ξ”k ξ”1 Π-right

  13. אלגוריתם CUTS(N) • נשים לב כי ניתן להניח שאם i < h אז Cdh נמצא כולו בתוך Cdi. כלומר שני המעגלים לא חוצים אחד את השני. • וזה משום שאז יש שני צמתים עם שני מסלולים קצרים ביותר ביניהם, וניתן לבחור אחד מהם. φs φt ξ3 ξ2 ξ1 ξk Cd3 Cd2

  14. אלגוריתם CUTS(N) • לכן נוכל לעשות "חיפוש בינארי". • כלומר נמצא את המעגל ה-k/2 (Cd⌈k/2⌉), נפצל את הרשת לפי המעגל הזה, ונריץ רקורסיבית. φs φt ξ2 ξ1 ξk

  15. וככה זה נראה על כדור מקראה: - הפאות שמתאימות ל-s ו-t - מסלול Π - המעגל Cd⌈k/2⌉ φt φt φs φs

  16. וככה זה נראה בגרף המקורי מקראה: - צמתי מקור ויעד - החתך C⌈k/2⌉ t’ s s s’ t t

  17. סיבוכיות אלגוריתם CUTS(N) • נבנה את עץ הרקורסיה: כיוון הזרימה Level 0 t’ t t’ t t s’ s’ s s s t’’’ t” S” s’’’ Level 1 Level 2

  18. סיבוכיות אלגוריתם CUTS(N) • נגדיר σl להיות מספר הצמתים בכל הגרפים ברמה lשל העץ. σ0 σ1 σ2 … … … … …

  19. סיבוכיות אלגוריתם CUTS(N) • בגרפים מישוריים |V| + |F| = |E| + 2 • לכן: |F| = O(|E|) = O(|V|) • ולכן:

  20. מציאת הזרימה מכסימלית מתוך CUTS(N) • מתוך הגרף הדואלי, Nd, נגדיר גרף התמרה, Nt כך: • כל צומת Π ξi є, מפוצלת ל- ξ’iו-ξ”i. כאשר יש ביניהם קשת שלילית שמכוונת שמאלה, וערכה –vmax (מינוס ערך הזרימה המכסימלית). Nd Nt ξ’1 ξ’2 ξ’k –vmax –vmax –vmax –vmax ξ”2 ξ”1 ξ”k

  21. מציאת הזרימה מכסימלית מתוך CUTS(N) • יהי r האינדקס שעבורו מצאנו ש-Ctr הוא המעגל הקצר ביותר שמקיף את φt. אורכו vmax, ולכן אין מעגלים שליליים בגרף. Ctr ξ’r Nt ξ’1 ξ’2 ξ’k –vmax –vmax –vmax –vmax ξ”2 ξ”1 ξ”r ξ”k

  22. נגדיר את u(v) • נגדיר פונקציה u: V ⟶ R כך שלכל v є V, u(v) הוא המרחק הקצר ביותר מהצומת ξ’r. וגם נגדיר לכל קשת v–w: u(v,w) = – u(w,v) = u(w) – u(v) Ctr ξ’r Nt ξ’1 ξ’2 ξ’k –vmax –vmax –vmax –vmax ξ”2 ξ”1 ξ”r ξ”k

  23. Lemma 1 • לכל 1 ≤ i ≤ k מתקיים: u(ξ’i) = u(ξ”i) – vmax • הוכחה: • ברור ש- u(ξ’i) ≤ u(ξ”i) – vmax • נתבונן במסלול הקצר ביותר מ-ξ’r ל-ξ’i. ונסמן את הקשת האחרונה בו שאינה במסלול Π העליון, v – ξ’p. ואת הצומת האחרונה לפני v שנמצאת במסלול Π העליון, ξ’h: מסלול ללא צמתים מ-Π. ξ’r― … ― ξ’h ― … ― v― ξ’p ― … ― ξ’i

  24. Lemma 1 • אם מניחים ש-v אינו צומת ב-Π, מקבלים שהמסלול המסומן קיים גם ב-Nd, והוא המסלול הקצר ביותר מ- ξ’h ל- ξ’p. אבל Π הוא המסלול הקצר ביותר מ- ξ’h ל-ξ’p, לכן ניתן להניח ש-v הוא הצומת ξ”p. • ולכן u(ξ”i) ≤ u(ξ’i) + vmax • כלומר u(ξ’i) ≥ u(ξ”i) – vmax מסלול ללא צמתים מ-Π. ξ’r― … ― ξ’h ― … ― v― ξ’p ― … ― ξ’i

  25. מסקנה • נוכל להגדיר את u(v,w) גם על הקשתות של Nd. Nd Nt u(ξ1,ξ2) –vmax –vmax –vmax –vmax u(ξ1,ξ2) u(ξk-1,ξk)

  26. Theorem 1 • את הזרימה המכסימלית ניתן לבנות כך: • כל קשת בגרף הדואלי v-w єV, עם u(v,w) ≥ 0, נסובב עם כיוון השעון ונקבל בגרף המקורי: f(v’,w’) = u(v,w). w u(v,w) f(v’,w’) v’ w’ v

  27. הוכחת Theorem 1 • 1. 0 ≤ u(v,w) ≤ length(v,w) = c(v’,w’) • 2. יהי φє Fd\{φs, φt}. שצמתיוv1, … , vq עם כיוון השעון והוא שקול לצומת a בגרף המקורי, אזי: u(v3) u(v2) φ u(v4) a u(v1) u(v5)

  28. הוכחת Theorem 1 • 3. ועבור φt, שצמתיוξ’k = v1, … , vq = ξ”k עם כיוון השעון. מלמה 1 נובע: • וכנ"ל עבור s. u(v2) φt u(ξ’k) u(v3) t u(ξ”k) u(v4)

  29. Lemma 2 • המעגל Ctr מחלק את הגרף Nt לשני חלקים, כך שלכל צומת v, המסלול הקצר ביותר מ- ξ’r ל-v עובר רק באחד מהם. • הוכחה: • כל מסלול שחוצה את Ctr פעמיים ניתן לקצר ע"י החלפת קטע ממנו בקטע מ- Ctr. Ctr ξ’r Ntin Ntout

  30. מסקנה • ניתן לחשב קודם מרחקים קצרים ביותר ב-Ntin. ואז באופן דומה ב-Ntout.

  31. הגדרות • המעגלים Cti מחלקים את הגרף לתתי גרפים באופן הבא: נגדיר את הרצועה Nti להיות כל מה שכלוא בין Cti לבין Cti+1 כולל. Ntr Ntr+1 Ntk ξ‘r φt

  32. הגדרות • נקרא למסלול (ξ’r ,v)נורמלי, אם האינדקס של ה-Nti-ים שבהם הוא עובר קודם גדל עד שהוא מגיע לערך q כלשהו, ואז קטן. וכשהוא קטן, המסלול לא עובר בקשתות שליליות. • סכמטית זה נראה כך: (באזור האדום אין קשתות שליליות) … … Ntr Ntr+1 Ntq-1 Ntq v ξ‘r Ctr Ctr+1 Ctq

  33. Lemma 3 • לכל צומת ב- Ntin יש מסלול (ξ’r ,v)קצר ביותר נורמלי. • הוכחה: • ראשית נראה שלכל מסלול קצר ביותר שמסתיים בקשת שלילית (ξ”i , ξ’i )יש מסלול נורמלי שקול. • נתבונן בקשת השלילית האחרונה לפני ξ”i, נסמן אותה (ξ”p , ξ’p). • לא יתכן ש i<p משום שאז המסלול חוצה את עצמו. לכן p<i. • המסלול שבין ξ’p לבין ξ”i לא מכיל קשתות שליליות, לכן הוא לא חוצה את אותו מעגל Ctפעמיים (כי אחרת אפשר לקצר אותו ע"י המעגל).

  34. הוכחת Lemma 3 ξ‘r ξ‘i ξ‘p ξ‘p ξ‘i

  35. הוכחת Lemma 3 • עבור כל צומת אחר: • נפרק את המסלול הקצר ביותר אליו לשני חלקים: החלק שמסתיים בקשת שלילית, והסוף שלא מכיל קשתות שליליות. • החלק שנגמר בקשת שלילת הוא נורמלי (כי הוכחנו הרגע). • החלק השני לא מכיל קשתות שלילות, ולכן הוא לא חותך את אותו מעגל פעמיים. • מש"ל v ξ‘r

  36. אלגוריתם Inside-Labels • 1. לכל v є Ntin : ∞ ←u(v) • 2. 0 ← u(ξ’r ) • 3. הפעל Dijkstra על המעגל Ctrללא הקשת השלילית (צומת מקורξ’r) • 4. עבור i מ-r עד k בצע: • 4.1. הפעל Dijkstra על הרצועה Ntiללא הקשתות השליליות (צמתי מקור – כל הצמתים שכבר חישבנו) • 4.2. עדכן את הקשתות השליליות של הרצועה Nti. • 5. הפעל Dijkstra על כל Ntinללא הקשתות השליליות (צמתי מקור - Ctk)

  37. מה פרוש צמתי מקור ב-Dijkstra? • פשוט נוסיף צומת w, שמחובר לכל צומת v, שידוע לו כבר u(v). ונריץ Dijkstra מהצומת w. הרשת צמתי מקור u(v1) ∞ w ∞ u(v2) ∞

  38. אלגוריתם Inside-Labels • וכך זה נראה סכמטית: Ntr Ntr+1 Ntk ξ‘r φt

  39. הוכחת נכונות אלגוריתם Inside-Labels • יהי v צומת ב-Ntin. לפי למה 3 יש לו מסלול קצר ביותר נורמלי. • קל לראות ע"י ההדגמה הבאה, שהאלגוריתם עובר על כל קשתות המסלול בסדר הנכון. נשים לב שקשתות שליליות נמצאות רק במעבר בין הרצועות, לכן הן מעודכנות בזמן. … … Ntr Ntr+1 Ntq-1 Ntq Ntk v ξ‘r Ctr Ctr+1 Ctq

  40. באג בסיבוכיות • מה קורה במקרה הבא? • כל הרצועות בגודל O(n), ויש O(n) רצועות. כלומר האלגוריתם רץ בסיבוכיות זמן של O(n2 log n). מעגל באורך O(n) ξ‘r ξ‘k Φt Ctr

  41. תיקון האלגוריתם • במקרים מנוונים נריץ את Dijkstra רק על החלק הלא מנוון של הרצועה. • מקבלים שכל קשת משתתפת לכל היותר בשלוש הרצות של Dijkstra. • ולכן סיבוכיות זמן הריצה של Inside-Labels הוא O(n log n). ξ‘i ξ‘i+1 Nti

  42. הסוף

More Related