1 / 36

All-Pairs Bottleneck Paths in Vertex Weighted Graphs

All-Pairs Bottleneck Paths in Vertex Weighted Graphs. Adapted from paper by Asaf Shapira , Raphael Yuster , Uri Zwick. הערות – לפני שנתחיל. לשאול שאלות תוך כדי זה בסדר, לפי המקרא הבא: שאלה מעניינת: "מעניין באמת מה התשובה, כי לי אין מושג" שאלה טובה: "הא הא! אני יודע מה התשובה!"

matia
Download Presentation

All-Pairs Bottleneck Paths in Vertex Weighted Graphs

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. All-Pairs Bottleneck Paths in Vertex Weighted Graphs Adapted from paper by AsafShapira, Raphael Yuster, Uri Zwick

  2. הערות – לפני שנתחיל • לשאול שאלות תוך כדי זה בסדר, לפי המקרא הבא: • שאלה מעניינת: "מעניין באמת מה התשובה, כי לי אין מושג" • שאלה טובה: "הא הא! אני יודע מה התשובה!" • שאלה מצויינת: "בואו נסתכל על השקף הבא..." • אם יש מינוח/סימון לא ברור, תרגישו חופשי לשאול, אלא אם כן זה מקרה 1

  3. הערות – לפני שנתחיל • הנחה היא שהקוד' תמיד ממויינים לפי משקל, ז"א W(Vi) ≤ W(Vi+1). • זה לא פוגע בסיבוכיות, כי בכל מקרה הסיבוכיות המינ' היא ריבועית, ומיון לוקח O(Vlog(V)). • יעזור בהמשך...

  4. מה זה APBP? (הגדרות) • נתון גרף מכוון G = (V, E, w), כאשר w: V → Rהיא פונ' משקולות על הקודקודים. • ה- bottleneck (המשקל הפוקק), או ה- capacity (קיבולת) של מסלול, הוא המשקל הנמוך ביותר על אותו מסלול. • עבור שני קודקודים u,v נסמן ב- C(u, v)את הקיבולת המקסימאלית על מסלול בין u ל – v. • במילים אחרות: אם נעבור על כל המסלולים בין u ל- v, ונבדוק מה הקיבולת של כל מסלול, אזי C(u,v) יהיה הערך הכי גדול מבין הקיבולות.

  5. מה זה APBP? (הגדרות) • כמובן שאפשר להבין למה זה מעניין – בעיות זרימה למיניהם... • יש 2 וריאנטים מרכזיים: • Open-APBP: כאשר לא מתחשבים במשקולות של קודקודי הקצה (לא מתחשבים ב- W(u), W(v)). • Closed-APBP: מתחשבים במשקולות הקצה, כלומר ייתכן ו- Ct(u, v) = W(u) או Ct(u, v) = W(v). אחת מתוצאות המאמר: 2 הבעיות שקולות (סיבוכית).

  6. התוצאה המרכזית ("החלק החכם") • אלגוריתם שמחשב מטריצת Open-APBP ומטריצת Closed-APBP בזמן O(n ^ (2 + μ)). • נשים לב שהחזקה היא 2 + μ, כאשר הוכח ש – 0.575 >μ(נובע מהקבוע של כפל מטריצות בוליאנות) • לכן סה"כ האלג' פועל בסיבוכיות: O(n ^ 2.575) • בכל מקרה אנחנו נשתמש בסימון μ הגנרי עבור סיבוכיות האלגוריתם שלנו

  7. מה בעצם באנו להוכיח? (פורמלי) במילים אחרות:יש אלג' שפותר את APBP בגרף מכוון בסדר גודל זמן שלוקח לבצע כפל מטריצות בוליאניות בגודל n X n.

  8. מוצאים אלג' A לחישובMWBMM (מטריצת עדים מקסימאליים לכפל מטריצות בוליאניות) בזמן - O(n ^ (2 + μ)) סקיצת ההוכחה בונים את A', שע"י שימוש ב- A פותר את בעיית Closed-APBP בגרפים מכוונים עבור אורך מסלול קבוע t (תכנות דינאמי) יוצרים אלג' "הפרד ומשול" רקורסיבי לפיתרון הבעיה הכללית, כאשר נעשה שימוש ב- A' לפתרון שלבים בדרך

  9. למעשה קיבלנו את החלק הזה ב"מתנה", שכן נתון לנו האלג' הבא בתור קופסא שחורה: חישוב MWBMM Kowaluk & Lingas מטריצת עדים מקסימאלית (מע"מ) עבור כפל 2 מטריצות בוליאניות n X n ניתנת לחישוב בזמן - O(n ^ (2 + μ)).

  10. מוצאים אלג' A לחישובMWBMM (מטריצת עדים מקסימאליים לכפל מטריצות בוליאניות) בזמן - O(n ^ (2 + μ)) סקיצת ההוכחה בונים את A', שע"י שימוש ב- A פותר את בעיית APBP בגרפים מכוונים עבור אורך מסלול קבוע t (תכנות דינאמי) יוצרים אלג' "הפרד ומשול" רקורסיבי לפיתרון הבעיה הכללית, כאשר נעשה שימוש ב- A' לפתרון שלבים בדרך

  11. הבעיה: נתון לנו אורך t ושני קודקודים u,v. רוצים למצוא את המשקל הפוקק המקסימאלי על כל המסלולים בין u ל- v, כאשר מסתכלים רק על מסלולים שאורכם עד t (כל קשת מוסיפה 1 לאורך המסלול – נזכור שהקשתות לא ממושקלות). הפתרון: ניעזר ב- Ps, Qs.

  12. תכנות דינאמי (אלג' 1? כן!!!) Ps(u,v) = 1 אם יש מסלול מ- u ל – v באורך s לכל היותר, שבו ל- v המשקל המינימאלי (אחרת 0). Qs(u,v) = 1 אם יש מסלול מ- u ל – v באורך s לכל היותר, שבו ל- u המשקל המינימאלי (אחרת 0). הרעיון: נבנה את המטריצות מלמטה למעלה עבור כל s בין 0 ל - t, וזה לא "קשה" כי בכל שלב מתחשבים רק בקצוות של מסלול מסוים, ובנוסף אפשר להיעזר התוצאות של השלב הקודם (שחישבנו כבר).

  13. בנייה נתון: • A – מטריצת שכנויות של G • B – מטריצה בוליאנית שבה: B(u,v) = 1 אם"ם w(u) >= w(v) מדרגה 0: P0 = Q0 = I מדרגה 1: • P1 = A ^ B. • Q1 = A ^ Bt.

  14. בנייה (המשך) מדרגה S: נניח שיש לנו את P (s – 1), Q (s – 1). אזי: • Ps = AP(s – 1) & B • Qs = Q(s – 1)A&Bt הוכחה: נניח שיש מסלול p = (u, x, … ,v) באורך s לכל היותר מ- u ל- v, שבו ל- v משקל מינימאלי. אזי A[u,x] = 1 (כי הם שכנים), ו- P(s-1)[x, v] = 1 כי כיp’ = (x…v) הוא מסלול באורך (s - 1) לכל היותר שבו ל- v משקל מינימאלי, וכן B[u, v] = 1, כי ל- v משקל מינימאלי במסלול בין u ל – v, כאשר w(u) עצמו כלול בהשוואת המשקולות. Qs זה אותו דבר, רק transposed.

  15. APBP עבור אורך מסלול חסום ב- t נחשב את Ps, Qs עבור כל הערכים s = 0, 1, … t, זה ייקח לנו O(t * n^μ) זמן. T קבוע, ולכן זה יוצא O(n^μ) זמן. עכשיו נחשב את Ws, שהיא המע"מ עבור הכפל Ps Q(t-s) , לכל ערך s. האלג' A שהראנו קודם מחשב כל Wsב - O(n^μ), יש לנו מספר קבוע (t) של מטריצות כאלה, ולכן זה מוסיף לנו סיבוכיות O(n^μ) זמן – ז"א הסיבוכיות הכוללת: O(n^μ) .

  16. הרעיון המרכזי כעת, כשיש לנו את כל ה- Ws שהראינו מקודם, ניתן למצוא את Ct(u,v) בזמן O(t) ע"י: • W(0) = -∞. • Ct(u, v) = W(max Ws(u, v)), כאשר Ws הכוונה לכל המטריצות Ws שחישבנו (ז"א s רץ על הערכים 0 … t. במילים אחרות: נסתכל על כל מטריצות Ws שחישבנו במקום ה- [u, v], וניקח את הערך המקסימאלי. נשתמש בערך זה כאינדקס של קודקוד: המשקל של אותו קודקוד הוא-הואCt(u, v).

  17. הוכחת הטענה המרכזית תנאי 0: אין מסלול באורך חסום t מ- u ל- v אם"ם Ws(u, v) = 0 עבור כל s, ז"א בכל המטריצות. -> במקרה זה תקף התנאי המיוחד שלנו, ו- W(0) = Ct(u, v).

  18. הוכחת הטענה המרכזית כיוון 1: נניח Ct(u, v) = w*, נראה שזה אכן מה שהאלג' שלנו מחזיר. ע"פ ההנחה, קיים מסלול p מ- u ל – v עם קיבולת w*, ו- y הוא קודקוד על המסלול p שעבורו – W(y) = w*. אפשר בעצם להסתכל על p כעל איחוד של שני מסלולים p1 = (u, …. ,y) ו – p2 = (y, … ,v), כאשר: |p1| = s, |p2| = t עבור 0 ≤ s ≤ t.

  19. הוכחת הטענה המרכזית כיוון 1 (המשך): כיון שלקודקוד y המשקל הכי נמוך בכלp, בפרט זה תקף ל- p1 ו- p2 בנפרד, ולכן: Ps(u, v) = 1 וכן Qt-s(u,v) = 1. ע"פ הגדרת מע"מ זה אומר ש- Ws(u, v) ≥ y, ולכן מתקיים שה- Ct שבחרנו מקיים (נזכור מיון קוד'): Ct(u, v) ≥ W(y) = w*. ■

  20. הוכחת הטענה המרכזית כיוון 2: נניח שהאלג' שלנו מחזיר w*, נראה שאכן Ct(u, v) = w*. נניח שקיבלנו w* כלשהו, אזי קיים קוד' y שעבורו W(y) = w*, וכן בהכרח יש שני 2 מסלולים: P1 = (u…y), P2 = (y…v), כך שאורך המסלול הכולל הוא לכל היותר t.

  21. הוכחת הטענה המרכזית כיוון 2 (המשך): בנוסף, ע"פ הגדרת Ps, Qs בהכרח ל- y המשקל הנמוך ביותר ב- P1 וגם ב- P2, ולכן בכל P. מכאן ש- Ct(u, v) ≤ w*. ■

  22. מוצאים אלג' A לחישובMWBMM (מטריצת עדים מקסימאליים לכפל מטריצות בוליאניות) בזמן - O(n ^ (2 + μ)) סקיצת ההוכחה בונים את A', שע"י שימוש ב- A פותר את בעיית APBP בגרפים מכוונים עבור אורך מסלול קבוע t (תכנות דינאמי) יוצרים אלג' "הפרד ומשול" רקורסיבי לפיתרון הבעיה הכללית, כאשר נעשה שימוש ב- A' לפתרון שלבים בדרך

  23. APBP – הנחות הנחות: -V = {1..n}, כאשר w(i) ≤ w(i+1). ז"א: הקודקודים ממויינים לפי משקל. - N הוא חזקה של 2 הערה: 2 ההנחות הנ"ל לא משפיעות על סיבוכיות הזמן שלנו.

  24. Uber Algorihm of DoomAPBP - APBP(V, E, w) • מחלקים את V לשני קבוצות: A = 1…n/2 B = V\A (המשלים של A) 2. נגדיר את Gb: הגרף המושרה ע"י B, ז"א מעיפים קשתות שנוגעות בקוד' מ- A. נפעיל את APBP() רקורסיבית על Gb.

  25. Uber Algorihm of DoomAPBP - 3. נגדיר את Ga: Ga = {A, E2}, כאשר (u, v) קשת ב- E2אמ"ם היא קיימת כבר ב- G, או שיש מסלול מ- u ל – v אשר כל הקוד' במסלול נמצאים בתוך. הרעיון: משאירים את הקשתות הרגילות (כמו גרף מושרה), ומוסיפים "קיצור דרך" עבור קוד' שכל המסלול שלהם היה ב- B. הערה: את Ga ניתן לבנות ב- O(n^ω), כלומר בזמן פולינומי כפי קבוע כפל מטריצות בוליאניות. נפעיל את APBP() רקורסיבית על Ga.

  26. סיכום ביניים – מה עשינו עד עכשיו? • עבור כל 2 קוד' ב- B, אם קיבלנו Cgb(u, v) > -∞ אזי בהכרח Cgb(u, v) = C(u, v). • עבור כל 2 קוד' ב- A, Cga(u, v) = C (u, v). אחלה בחלה, אז למה אנחנו עדיין פה? כי נשארו עוד שלושה מקרים מיוחדים לבדוק, ה"תפר" בין קבוצות A ו- B.

  27. ה"תפר" בין A ל- B יש שלושה מקרים של C(u, v) שלא חישבנו: • AxB з (u,v) • BxA з (u,v) ז"א: מסלולים שתחילתם בקבוצה אחת וסופם בקבוצה אחרת. • BxB з (u,v), ושעבורם קיבלנו- Cgb(u,v) = -∞. ז"א: 2 קוד' שייתכן שיש ביניהם מסלול, שהקוד' שלו ב- A.

  28. ה"תפר" בין A ל- B אז בשביל לעבור על המקרים הללו, נבנה גרף מיוחד G’ = (V’, E’) כדלקמן: V’ = B1 U A2 U A3 U A4 U B5, כאשר B1, B5 הם שכפולים של B ו- A2, A3, A4 הם שכפולים של A. נשים לב ש- |V’| = 2.5n. עבור כל u מתוך V, ui יהיה העותק של u בתוך Ai או Bi. בנוסף, w(ui) = w(u).

  29. ה"תפר" בין A ל- B • עבור כל uзB, vзA, נוסיף את הקשת (u1, v2)אם"ם יש מסלול מ- u ל – v (ב- G המקורי) שכל קוד' הפנימיים מ- B. • עבור כל u, vзA נוסיף את הקשת (u2, v3)אם"ם c(u,v) = w(v). • עבור כל u, vзA נוסיף את הקשת (u3, v4)אם"ם c(u,v) = w(u). הערה: השניים האחרונים אפשריים כיון שכבר חישבנו את c(u, v) קודם, בקריאה הרקורסיבית על Ga, ז"א c(u, v) כבר ידוע לנו בשלב הזה!

  30. ה"תפר" בין A ל- B • ולסיום הבנייה, עבור כל u з A, v з B נוסיף את הקשת (u4, v5) אם"ם יש מסלול מ- u ל- v (ב- G המקורי) שכל קודקודיו הפנימיים מ- B. הערה: את כל הקשתות הנ"ל ניתן ליצור ב- O(n^ω) זמן, ולכן זהו גם הזמן הדרוש ליצירת G’.

  31. ה"תפר" בין A ל- B ועכשיו הקסם: כל המסלולים ב- G’ חסום הם באורך 4 לכל היותר, ולכן אם נקבע t = 4 נוכל כמובן לחשב את APBP (ע"י אלג' העזר שלנו) ב- O(n ^ (2 + μ)). הטענה היא שהמטריצה שהתקבלה, פותרת לנו את כל מקרי התפר שהזכרנו.

  32. למה זה עובד? ניקח 2 קוד' uзB, vзA, שיש ביניהם מסלול: לקוד' הראשון על המסלול בתוך קבוצה A נקרא x, ולקודקוד בעל המשקל הפוקק נקרא y, ז"א: C(u, v) = w(y). נשים לב שבפרט, yзA (הקוד' ממויינים לפי משקל, זוכרים?).

  33. למה זה עובד? ע"פ הגדרת G’, יש לנו שלושה קשתות: (u1, x2), (x2, y3), (y3, v4) שנמצאים ב- E’. מכאן, בהכרח: Cg’(u1, v4) ≤ w(y3) = w(y) = c(u,v). כמו כן: Cg’(u1, v4) ≥ (u, v), ולכן: ←C(u,v) = Cg’(u1, v4)■

  34. למה זה עובד? באופן דומה: • עבור הכיוון הפוך, ז"א: vзB, uзA, אזי נקבל ש: Cg’(u2, v5) = C(u, v). • עבור שני קוד' u,vзB שעבורם Cgb(u, v) = -∞, נקבל ש- C(u, v) = Cg’(u1, v5).

  35. סיבוכיות אז ראינו את האלג' לפיתרון, אבל מה הסיבוכיות??? • פיתרון 2 רקורסיביות בחצי גודל +עיבוד שלוקח O(n ^ (2 + μ)): • F(n) ≤ O(n ^ (2 + μ)) + 2F(n/2) . • זה יוצא (למי שזוכר בדידה...): F(n) = O(n ^ (2 + μ)) ■

  36. לסיכום • יש מספר מסקנות שימושיות, אם היה לנו עוד זמן הייתי חופר גם עליהן... • כולם להתעורר • תודה על ההקשבה!!! • איחלתי לחייל הצלחה. • בברכה, צוות APBP

More Related