360 likes | 511 Views
All-Pairs Bottleneck Paths in Vertex Weighted Graphs. Adapted from paper by Asaf Shapira , Raphael Yuster , Uri Zwick. הערות – לפני שנתחיל. לשאול שאלות תוך כדי זה בסדר, לפי המקרא הבא: שאלה מעניינת: "מעניין באמת מה התשובה, כי לי אין מושג" שאלה טובה: "הא הא! אני יודע מה התשובה!"
E N D
All-Pairs Bottleneck Paths in Vertex Weighted Graphs Adapted from paper by AsafShapira, Raphael Yuster, Uri Zwick
הערות – לפני שנתחיל • לשאול שאלות תוך כדי זה בסדר, לפי המקרא הבא: • שאלה מעניינת: "מעניין באמת מה התשובה, כי לי אין מושג" • שאלה טובה: "הא הא! אני יודע מה התשובה!" • שאלה מצויינת: "בואו נסתכל על השקף הבא..." • אם יש מינוח/סימון לא ברור, תרגישו חופשי לשאול, אלא אם כן זה מקרה 1
הערות – לפני שנתחיל • הנחה היא שהקוד' תמיד ממויינים לפי משקל, ז"א W(Vi) ≤ W(Vi+1). • זה לא פוגע בסיבוכיות, כי בכל מקרה הסיבוכיות המינ' היא ריבועית, ומיון לוקח O(Vlog(V)). • יעזור בהמשך...
מה זה APBP? (הגדרות) • נתון גרף מכוון G = (V, E, w), כאשר w: V → Rהיא פונ' משקולות על הקודקודים. • ה- bottleneck (המשקל הפוקק), או ה- capacity (קיבולת) של מסלול, הוא המשקל הנמוך ביותר על אותו מסלול. • עבור שני קודקודים u,v נסמן ב- C(u, v)את הקיבולת המקסימאלית על מסלול בין u ל – v. • במילים אחרות: אם נעבור על כל המסלולים בין u ל- v, ונבדוק מה הקיבולת של כל מסלול, אזי C(u,v) יהיה הערך הכי גדול מבין הקיבולות.
מה זה APBP? (הגדרות) • כמובן שאפשר להבין למה זה מעניין – בעיות זרימה למיניהם... • יש 2 וריאנטים מרכזיים: • Open-APBP: כאשר לא מתחשבים במשקולות של קודקודי הקצה (לא מתחשבים ב- W(u), W(v)). • Closed-APBP: מתחשבים במשקולות הקצה, כלומר ייתכן ו- Ct(u, v) = W(u) או Ct(u, v) = W(v). אחת מתוצאות המאמר: 2 הבעיות שקולות (סיבוכית).
התוצאה המרכזית ("החלק החכם") • אלגוריתם שמחשב מטריצת Open-APBP ומטריצת Closed-APBP בזמן O(n ^ (2 + μ)). • נשים לב שהחזקה היא 2 + μ, כאשר הוכח ש – 0.575 >μ(נובע מהקבוע של כפל מטריצות בוליאנות) • לכן סה"כ האלג' פועל בסיבוכיות: O(n ^ 2.575) • בכל מקרה אנחנו נשתמש בסימון μ הגנרי עבור סיבוכיות האלגוריתם שלנו
מה בעצם באנו להוכיח? (פורמלי) במילים אחרות:יש אלג' שפותר את APBP בגרף מכוון בסדר גודל זמן שלוקח לבצע כפל מטריצות בוליאניות בגודל n X n.
מוצאים אלג' A לחישובMWBMM (מטריצת עדים מקסימאליים לכפל מטריצות בוליאניות) בזמן - O(n ^ (2 + μ)) סקיצת ההוכחה בונים את A', שע"י שימוש ב- A פותר את בעיית Closed-APBP בגרפים מכוונים עבור אורך מסלול קבוע t (תכנות דינאמי) יוצרים אלג' "הפרד ומשול" רקורסיבי לפיתרון הבעיה הכללית, כאשר נעשה שימוש ב- A' לפתרון שלבים בדרך
למעשה קיבלנו את החלק הזה ב"מתנה", שכן נתון לנו האלג' הבא בתור קופסא שחורה: חישוב MWBMM Kowaluk & Lingas מטריצת עדים מקסימאלית (מע"מ) עבור כפל 2 מטריצות בוליאניות n X n ניתנת לחישוב בזמן - O(n ^ (2 + μ)).
מוצאים אלג' A לחישובMWBMM (מטריצת עדים מקסימאליים לכפל מטריצות בוליאניות) בזמן - O(n ^ (2 + μ)) סקיצת ההוכחה בונים את A', שע"י שימוש ב- A פותר את בעיית APBP בגרפים מכוונים עבור אורך מסלול קבוע t (תכנות דינאמי) יוצרים אלג' "הפרד ומשול" רקורסיבי לפיתרון הבעיה הכללית, כאשר נעשה שימוש ב- A' לפתרון שלבים בדרך
הבעיה: נתון לנו אורך t ושני קודקודים u,v. רוצים למצוא את המשקל הפוקק המקסימאלי על כל המסלולים בין u ל- v, כאשר מסתכלים רק על מסלולים שאורכם עד t (כל קשת מוסיפה 1 לאורך המסלול – נזכור שהקשתות לא ממושקלות). הפתרון: ניעזר ב- Ps, Qs.
תכנות דינאמי (אלג' 1? כן!!!) Ps(u,v) = 1 אם יש מסלול מ- u ל – v באורך s לכל היותר, שבו ל- v המשקל המינימאלי (אחרת 0). Qs(u,v) = 1 אם יש מסלול מ- u ל – v באורך s לכל היותר, שבו ל- u המשקל המינימאלי (אחרת 0). הרעיון: נבנה את המטריצות מלמטה למעלה עבור כל s בין 0 ל - t, וזה לא "קשה" כי בכל שלב מתחשבים רק בקצוות של מסלול מסוים, ובנוסף אפשר להיעזר התוצאות של השלב הקודם (שחישבנו כבר).
בנייה נתון: • A – מטריצת שכנויות של G • B – מטריצה בוליאנית שבה: B(u,v) = 1 אם"ם w(u) >= w(v) מדרגה 0: P0 = Q0 = I מדרגה 1: • P1 = A ^ B. • Q1 = A ^ Bt.
בנייה (המשך) מדרגה 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.
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^μ) .
הרעיון המרכזי כעת, כשיש לנו את כל ה- 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).
הוכחת הטענה המרכזית תנאי 0: אין מסלול באורך חסום t מ- u ל- v אם"ם Ws(u, v) = 0 עבור כל s, ז"א בכל המטריצות. -> במקרה זה תקף התנאי המיוחד שלנו, ו- W(0) = Ct(u, v).
הוכחת הטענה המרכזית כיוון 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.
הוכחת הטענה המרכזית כיוון 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*. ■
הוכחת הטענה המרכזית כיוון 2: נניח שהאלג' שלנו מחזיר w*, נראה שאכן Ct(u, v) = w*. נניח שקיבלנו w* כלשהו, אזי קיים קוד' y שעבורו W(y) = w*, וכן בהכרח יש שני 2 מסלולים: P1 = (u…y), P2 = (y…v), כך שאורך המסלול הכולל הוא לכל היותר t.
הוכחת הטענה המרכזית כיוון 2 (המשך): בנוסף, ע"פ הגדרת Ps, Qs בהכרח ל- y המשקל הנמוך ביותר ב- P1 וגם ב- P2, ולכן בכל P. מכאן ש- Ct(u, v) ≤ w*. ■
מוצאים אלג' A לחישובMWBMM (מטריצת עדים מקסימאליים לכפל מטריצות בוליאניות) בזמן - O(n ^ (2 + μ)) סקיצת ההוכחה בונים את A', שע"י שימוש ב- A פותר את בעיית APBP בגרפים מכוונים עבור אורך מסלול קבוע t (תכנות דינאמי) יוצרים אלג' "הפרד ומשול" רקורסיבי לפיתרון הבעיה הכללית, כאשר נעשה שימוש ב- A' לפתרון שלבים בדרך
APBP – הנחות הנחות: -V = {1..n}, כאשר w(i) ≤ w(i+1). ז"א: הקודקודים ממויינים לפי משקל. - N הוא חזקה של 2 הערה: 2 ההנחות הנ"ל לא משפיעות על סיבוכיות הזמן שלנו.
Uber Algorihm of DoomAPBP - APBP(V, E, w) • מחלקים את V לשני קבוצות: A = 1…n/2 B = V\A (המשלים של A) 2. נגדיר את Gb: הגרף המושרה ע"י B, ז"א מעיפים קשתות שנוגעות בקוד' מ- A. נפעיל את APBP() רקורסיבית על Gb.
Uber Algorihm of DoomAPBP - 3. נגדיר את Ga: Ga = {A, E2}, כאשר (u, v) קשת ב- E2אמ"ם היא קיימת כבר ב- G, או שיש מסלול מ- u ל – v אשר כל הקוד' במסלול נמצאים בתוך. הרעיון: משאירים את הקשתות הרגילות (כמו גרף מושרה), ומוסיפים "קיצור דרך" עבור קוד' שכל המסלול שלהם היה ב- B. הערה: את Ga ניתן לבנות ב- O(n^ω), כלומר בזמן פולינומי כפי קבוע כפל מטריצות בוליאניות. נפעיל את APBP() רקורסיבית על Ga.
סיכום ביניים – מה עשינו עד עכשיו? • עבור כל 2 קוד' ב- B, אם קיבלנו Cgb(u, v) > -∞ אזי בהכרח Cgb(u, v) = C(u, v). • עבור כל 2 קוד' ב- A, Cga(u, v) = C (u, v). אחלה בחלה, אז למה אנחנו עדיין פה? כי נשארו עוד שלושה מקרים מיוחדים לבדוק, ה"תפר" בין קבוצות A ו- B.
ה"תפר" בין A ל- B יש שלושה מקרים של C(u, v) שלא חישבנו: • AxB з (u,v) • BxA з (u,v) ז"א: מסלולים שתחילתם בקבוצה אחת וסופם בקבוצה אחרת. • BxB з (u,v), ושעבורם קיבלנו- Cgb(u,v) = -∞. ז"א: 2 קוד' שייתכן שיש ביניהם מסלול, שהקוד' שלו ב- A.
ה"תפר" בין 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).
ה"תפר" בין 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) כבר ידוע לנו בשלב הזה!
ה"תפר" בין A ל- B • ולסיום הבנייה, עבור כל u з A, v з B נוסיף את הקשת (u4, v5) אם"ם יש מסלול מ- u ל- v (ב- G המקורי) שכל קודקודיו הפנימיים מ- B. הערה: את כל הקשתות הנ"ל ניתן ליצור ב- O(n^ω) זמן, ולכן זהו גם הזמן הדרוש ליצירת G’.
ה"תפר" בין A ל- B ועכשיו הקסם: כל המסלולים ב- G’ חסום הם באורך 4 לכל היותר, ולכן אם נקבע t = 4 נוכל כמובן לחשב את APBP (ע"י אלג' העזר שלנו) ב- O(n ^ (2 + μ)). הטענה היא שהמטריצה שהתקבלה, פותרת לנו את כל מקרי התפר שהזכרנו.
למה זה עובד? ניקח 2 קוד' uзB, vзA, שיש ביניהם מסלול: לקוד' הראשון על המסלול בתוך קבוצה A נקרא x, ולקודקוד בעל המשקל הפוקק נקרא y, ז"א: C(u, v) = w(y). נשים לב שבפרט, yзA (הקוד' ממויינים לפי משקל, זוכרים?).
למה זה עובד? ע"פ הגדרת 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)■
למה זה עובד? באופן דומה: • עבור הכיוון הפוך, ז"א: vзB, uзA, אזי נקבל ש: Cg’(u2, v5) = C(u, v). • עבור שני קוד' u,vзB שעבורם Cgb(u, v) = -∞, נקבל ש- C(u, v) = Cg’(u1, v5).
סיבוכיות אז ראינו את האלג' לפיתרון, אבל מה הסיבוכיות??? • פיתרון 2 רקורסיביות בחצי גודל +עיבוד שלוקח O(n ^ (2 + μ)): • F(n) ≤ O(n ^ (2 + μ)) + 2F(n/2) . • זה יוצא (למי שזוכר בדידה...): F(n) = O(n ^ (2 + μ)) ■
לסיכום • יש מספר מסקנות שימושיות, אם היה לנו עוד זמן הייתי חופר גם עליהן... • כולם להתעורר • תודה על ההקשבה!!! • איחלתי לחייל הצלחה. • בברכה, צוות APBP