תרגול 9 מסלולים קלים ביותר תרגיל APSP - 1 עד כה דנו באלגוריתמים לפתרון בעית מסלולים קלים מציאת מסלולים קלים ביותר מצומת ביותר ממקור יחיד. כלומר, V לכל צמתי הגרף. בעיה אחרת הקשורה לבעיה זו היא בעית ה-( APSP ).All-Pair Sortet Pat כפי שנרמז משמה של הבעיה, אנו מתבקשים לחשב את )משקל( מסלול קל ביותר בין כל זוג צמתים בגרף. נדגיש כי אנו לא מניחים דבר על המשקלות, פרט לכך שאין מעגל שלילי בגרף. כלומר, ייתכנו משקלות שליליות. פתרון אחד אפשרי היא O V E לבעיה שכן אנו מריצים V הוא להריץ בלמן פורד מכל צומת. עלות אלגוריתם זה פעמים בלמן פורד. נדמה שאלגוריתם זה הוא בזבזני למדי שכן בכל הרצה אנו מתעלמים לחלוטין מכל המידע שהצטבר בהרצות קודמות )מה שיכול להזכיר לנו את המצב שהיינו בו כשפתרנו את בעיית מציאת כל השורשים של גרף מכוון נתון(. ואכן כך הדבר קיים אלגוריתם, שנפגוש בהרצאות בהמשך הקורס, הנקרא בעיית ה- APSP בזמן האלגוריתם של פלויד-וורשל (Floyd-Warall).O V 3 הפותר את בתרגיל זה אנו נלך בגישה שונה. כמה זמן יקח לנו לפתור את בעיית ה- APSP עבור גרף בו כל המשקלים אי-שליליים? ובכן, במקרה דייקסטרה מכל צומת תעלה לנו בסך הכל זה, הרצה נאיבית למדי של, שכן הרצה בודדת. V עולה ולכן הרצות יעלו הרעיון אם כך הוא להמיר את משקלי הקשתות במשקלים אי-שלילים תוך שימור מסלולים קלים יהיה צוואר הבקבוק בזמן הריצה ביותר וזאת מספיק מהר בכדי ש- של האלגוריתם.
אלגוריתם זה, שנפתח מיד, נקרא האלגוריתם של ג'ונסון (1977 (Jonon, והוא עולה בביצועיו על זה של פלויד-וורשל כאשר הוא מופעל על גרפים שאינם צפופים מדי )ובפרט כאשר (. w: E R G V, E מכאן ואילך אנו נניח כי נתון לנו גרף עם פונקצית משקל על. הקשתות, כך שאין מעגל במשקל שלילי ב- G : V R טענה 1 תהא w : E R באופן הבא: לכל קשת פונקצית משקל המתאימה לכל uv E נגדיר צומת מספר ממשי. נגדיר. w uv u w uv v אזי. w w מסלול p ל- v מ- u הוא קל ביותר לפי אם"ם הוא קל ביותר לפי.1. w 4. אין מעגלים שליליים לפי. p u v1 v vk אז v הוכחה יהא k1 k1 w p w v v w v v v v u v w p,, i i1 i i1 i i1 i1 i1 על כן. w p w p u v בצד ימין של שוויון זה אנו רואים ביטוי שאינו תלוי במסלול p גדלים באותו ביטוי ( אלא רק בצמתי הקצה u אם כך, משקל כל המסלולים מ-. uv,. w במקום לפי w ) u כשמסתכלים עליהם לפי v ל- v. w w בפרט, p הוא מסלול קל ביותר לפי אם"ם הוא מסלול קל ביותר לפי בכדי להוכיח את החלק השני של הטענה נבחין כי במקרה של מעגל מתקיים. w C w C בפרט, מכיוון שאנו מניחים שאין מעגלים שליליים לפי v ולכן v 1 k. w, w אין מעגלים שליליים לפי
uv E : V R כל שנותר אם כך הוא למצוא פונקציה כך שלכל מתקיים 0. w uv u v אי השוויון הזה מוכר? ודאי הוא דומה בצורתו לאי-שוויון המשולש, המתקיים עבור מסלולים קלים ביותר. ו- V. E ' E v : v כמו כן ' we w e V ' V לכל vv כך ש- G ' V ', E ' נגדיר גרף חדש w': נגדיר E R כך ש- 0 w' v ו- לכל קשת אחרת.. את משקל המסלול הקל ביותר מ- ל- v ב- ' G נבחין כי v ובפרט, vv נסמן ב- v לכל. כמו כן, מכיוון שאין מעגלים שליליים v v. כלומר, G ' G v 0 בגרף אין מעגלים שליליים בגרף ולכן הוא uv E מספר ממשי. בנוסף, מאי-שוויון המשולש, לכל קשת מתקיים.. מכאן הכל ברור ניקח v u w' uv מכל האמור לעיל, יש לנו האלגוריתם הבא אלגוריתם w: E R G V, E קלט: גרף מכוון עם פונקצית משקל על הקשתות ללא מעגלים שליליים. פלט: משקל מסלול קל ביותר מכל צומת לכל צומת. בנה את ' G כפי שהוגדר לעיל. חשב את כפי שהוגדר לעיל, בעזרת האלגוריתם של.Bellman Ford.1.4. w 4. חשב את פונקצית המשקל מכל צומת u הרץ דייקסטרה לחישוב משקל מסלולים קלים ביותר מ- uv. w לכל הצמתים, ביחס לפונקצית המשקל נסמן את הערך המתקבל ב-.3. d ' u, v. d ' u, v v u u, עבור כל זוג צמתים vv החזר כפלט.5
נכונות נכונות האלגוריתם נובעת מהדיון לעיל. סיבוכיות שלב )1( עולה זמן לינארי. בשלב )4( אנו מריצים Bellman Ford על הגרף ' G ולכן זמן הריצה של שלב זה הוא ' ' 1. O V E O V V E O V VE שלב )4( רץ בזמן לינארי. שלב )3( עולה בשלב )5( ניתן לביצוע בזמן לינארי. מהאמור לעיל, והתיקון הנעשה G במקום לבחור צומת לגרף על כן הסיבוכיות הכוללת היא הערה יש מקום להבהיר למה היינו צריכים להוסיף צומת ולחשב ממנו את פונקציית המרחקים. הסיבה היא שאנו רוצים G קיים בגרף שפונקצית המרחקים תקבל ערכים סופיים, שכן אחרת פונקצית המשקל שהיא )איתם משרה היא אמנם אי-שלילית, אבל היא מקבלת גם ערכים אינסופיים דייקסטרה לא יודע )ולא אמור לדעת( להתמודד(. הדבר יקרה אם הצומת הנבחר הוא לא מקור. תרגיל בעיית ה- Arbitrage אחד היתרונות הנוספים של Bellman-Ford הוא שהוא יודע לזהות האם קיים בגרף מכוון עם משקלות על הקשתות מעגל שלילי. אנו ננצל תכונה זו של Bellman-Ford בכדי לפתור את הבעיה הבאה.
תרגיל נתונים n מסדר סוגי מטבעות. שערי החליפין בין כל זוג מטבעות נתונים על ידי מטריצה i, j A i, j כך ש- הוא שער החליפין בין המטבעות )כלומר תמורת n n A.) j A i, j יחידה אחת של מטבע i ניתן לקנות יחידות של מטבע אנו מעוניינים להכריע האם קיימת סדרה של החלפת מטבעות המתחילה ומסתיימת באותו המטבע, כך שבסיומה תהיה בידנו כמות גדולה יותר של המטבע ממנו יצאנו דרך נאה להרוויח לחמכם. פתרון G V, E ננסה לעשות רדוקציה לבעית מציאת מעגל שלילי בגרף. נגדיר גרף על. w i, j i, צמתים. כל צומת ייצג מטבע. בין כל זוג צמתים j תהיה קשת עם משקל n w i, j אנו רוצים להגדיר את כך שמעגל שלילי בגרף פירושו סדרה כנדרש. נגדיר i1, i,, i k היא סדרת מטבעות. w ואכן, אם log A i, j i, j A A A i1, i i, i3 i 1, 1 k ik log A A A log1 0 i1, i i, i3 ik 1, ik k 1 j1 ij, ij 1 log A 0 שקול ל- השקול בתורו ל- k 1 j1 j1 w i, i 0 j השקול ל-
כלומר, למעגל שלילי בגרף. מהדיון לעיל נקבל את האלגוריתם הבא: אלגוריתם n קלט: מטריצת שערי חליפין A של סוגי מטבעות. פלט: קיומה של סדרת החלפת מטבעות המבטיחה לנו רווח. בנה את הגרף הרץ את G כמתואר לעיל, יחד עם פונקצית המשקל. w Bellman-Ford מצומת שרירותי מעגל שלילי בגרף, והחזר כמוהו. V להכרעה בדבר קיומו של.1.4 נכונות נכונות האלגוריתם נובעת כמעט לחלוטין מהדיון לעיל. יש רק נקודה אחת להבהיר מכיוון שכל צמתי הגרף הם שורשים, אם קיים מעגל שלילי אז הוא ישיג מכל צומת, ולכן בשלב )4( באלגוריתם הרשנו לעצמנו לבחור באופן שרירותי את הצומת ממנו נריץ.Bellman-Ford סיבוכיות בגרף V n ו-. שלב )1( ניתן לביצוע ב-.On זמן הריצה של שלב E O n 3 On )4( הוא. O VE