( ) מסלולים קלים ביותר SP 7 תרגול ( ) אלגוריתם ממקור יחיד

‫מסלולים קלים ביותר )‪(SP‬‬
‫נתון גרף‬
‫ ‪) ,‬מכוון או לא מכוון( ונתונה פונקציית משקל על הקשתות → ‪.:‬‬
‫נסמן ב ‪ ௨‬או ‪ ,‬את משקל המסלול הקל ביותר מ ל ‪.‬‬
‫‬
‫תרגול ‪7‬‬
‫משקל מסלול סכום משקלי הקשתות במסלול‪.‬‬
‫תכונות מסלולים קלים ביותר‬
‫‪ .1‬מבנה אופטימלי‪ :‬תת מסלול של מסלול קל ביותר הוא מסלול קל ביותר‪.‬‬
‫מסלולים קלים ביותר‬
‫)‪(Shortest Paths‬‬
‫‬
‫אחרת‪ ,‬ניתן היה לשפר את ע"י החלפת תת המסלול‪.‬‬
‫‪x‬‬
‫‪v‬‬
‫‪u‬‬
‫‪y‬‬
‫‪ .2‬אי שוויון המשולש‪ :‬לכל ∈ ‪:, ,‬‬
‫ ‪
, , ,‬‬
‫‪w‬‬
‫‪v‬‬
‫‪1‬‬
‫אלגוריתמים ‪ - 1‬טכניון ©‬
‫‪2‬‬
‫יונתן יניב‬
‫מסלולים קלים ביותר ממקור יחיד )‪(SSSP‬‬
‫מטרה‪ :‬בהינתן ∈ ‪ ,‬לחשב את משקל המסלול הקל ביותר ‪ ௦‬מהצומת לכל ∈ ‪.‬‬
‫‬
‫עבור צומת ∈ שאינו ישיג מ ‪ ,‬נסמן ∞ = ‪.௦‬‬
‫‬
‫‪.3‬‬
‫‬
‫‬
‫אתחל‪ ௦ ← ∞ ,
௦ ← 0 :‬לכל ≠ ‪.‬‬
‫‪.1‬‬
‫אם קיים מעגל במשקל שלילי אשר ישיג מ ‪ ,‬יהיו צמתים עבורם ∞‪.௦ = −‬‬
‫מקרה פרטי‪ :‬אם פונקציה קבועה וחיובית‪ ,‬משקל מסלול פרופורציונלי לאורכו‪.‬‬
‫אלגוריתמים ‪ - 1‬טכניון ©‬
‫אלגוריתם ‪Dijkstra‬‬
‫‪.2‬‬
‫הבחנה‪ :‬אם אין מעגלים במשקל שלילי‪ ,‬תמיד קיים מסלול קל ביותר שהוא פשוט‪.‬‬
‫הכנס את כל צמתי הגרף לתור עדיפויות המסודר לפי ‪.
௦‬‬
‫כל עוד )∅ ≠ (‬
‫‪ .3.1‬הוצא את הצומת ∈ בעל ‪ ௦‬מינימלי‪.‬‬
‫‪ .3.2‬לכל ∈ ‪ ,‬בצע צעד רלקסציה‪:‬‬
‫לכן ניתן לפתור מקרה זה ע"י הרצת ‪.BFS‬‬
‫ ‪.
௦ ← min ௦ , ௦ + ,‬‬
‫‪18‬‬
‫נכונות‪ :‬כאשר מוציאים צומת מ ‪ ,‬מובטח כי ‪
௦‬‬
‫אלגוריתמים למציאת מסלולים קלים ביותר ממקור יחיד‪:‬‬
‫‪ .1‬אלגוריתם ‪ :Dijkstra‬רץ בסיבוכיות זמן ‪. + log‬‬
‫‪ .2‬אלגוריתם ‪ :Bellman-Ford‬רץ בסיבוכיות זמן ‪.‬‬
‫‬
‫כל מסלול אחר חייב לעבור דרך ∈ המקיים ‪.௦ ≤ ௦‬‬
‫‬
‫הנחת יסוד‪ :‬כל המשקלים אי‪-‬שליליים‪.‬‬
‫‪15‬‬
‫‪10‬‬
‫‪1‬‬
‫‪s‬‬
‫‪9‬‬
‫‪15‬‬
‫‪4‬‬
‫‪28‬‬
‫אלגוריתמים ‪ - 1‬טכניון ©‬
‫‪7‬‬
‫‪5‬‬
‫במידה וקיים מעגל במשקל שלילי אשר ישיג מהצומת ‪ ,‬האלגוריתם מוצא ומחזיר אותו‪.‬‬
‫‪4‬‬
‫‪12‬‬
‫‪3‬‬
‫סיבוכיות‪. + log :‬‬
‫עובד גם כאשר יש קשתות במשקל שלילי‪.‬‬
‫‪7‬‬
‫‪11‬‬
‫הוא משקל המסלול הקל ביותר מ ל ‪.‬‬
‫מניח שפונקציית המשקל אי שלילית‪ ,‬כלומר‪. ∀ ∈ , ≥ 0 :‬‬
‫‪3‬‬
‫‪u‬‬
‫‪24‬‬
‫‪9‬‬
‫אלגוריתמים ‪ - 1‬טכניון ©‬
‫‪0‬‬
‫אלגוריתם ‪Bellman-Ford‬‬
‫תרגיל ‪1‬‬
‫נתון גרף מכוון ‪ = ,‬עם משקלים אי‪-‬שליליים על הקשתות‪ ,‬פרט לקשת יחידה ‪ = ,‬‬
‫אתחל‪ ௦ ← ∞ ,
௦ ← 0 :‬לכל ≠ ‪.‬‬
‫‪.1‬‬
‫שמשקלה שלילי‪ .‬נתון כי אין מעגלים בעלי משקל שלילי בגרף‪.‬‬
‫נתון צומת ∈ ‪ .‬הציעו אלגוריתם המחשב את ‪ ௦‬לכל ∈ בזמן ‪. + log‬‬
‫בצע פעמים‪,‬‬
‫‪.2‬‬
‫‪ .2.1‬עבור על הקשתות בסדר כלשהו‪ .‬לכל קשת ∈ ‪ ,‬בצע צעד רלקסציה‪:‬‬
‫ ‪
௦ ← min ௦ , ௦ + ,‬‬
‫פתרון‬
‫יהא ∈ ‪ .‬למסלול הקל ביותר מצומת לצומת יש שתי אפשרויות‪:‬‬
‫‪ .1‬המסלול לא עובר דרך הקשת ‪. = ,‬‬
‫‪ .2‬המסלול עובר דרך הקשת ‪ = ,‬פעם אחת בלבד‪.‬‬
‫נקודה מרכזית‪ :‬לאחר איטרציה אחת של שלב ‪) 2‬דוגמא משמאל(‬
‫‪4‬‬
‫הערך ‪ ௦‬נכון עבור כל הצמתים עבורם קיים מסלול קל‬
‫‪11‬‬
‫ביותר מ אליהם באורך ‪.1‬‬
‫‬
‫‪3‬‬
‫אם לא קיים מעגל שלילי‪ ,‬לאחר ‪ − 1‬איטרציות של שלב ‪2‬‬
‫‪12‬‬
‫‪5‬‬
‫‪1‬‬
‫∞‬
‫‪0‬‬
‫‪s‬‬
‫ ‪. ᇱ = , −‬‬
‫לפי המבנה האופטימלי של מסלולים קלים ביותר )תת מסלול הוא מסלול קל ביותר(‪:‬‬
‫ ‪
௦ = min ௦ᇱ , ௦ᇱ + + ௕ᇱ‬‬
‫‪9‬‬
‫‪15‬‬
‫‪4‬‬
‫סיבוכיות‪. :‬‬
‫נסמן ב ‪ ௦ᇱ‬את משקל המסלול הקל ביותר מצומת לצומת בגרף‬
‫‪10‬‬
‫אם קיים מעגל שלילי‪ ,‬נבצע צעד רלקסציה באיטרציה ה ‪.‬‬
‫היות ואין מעגלים שליליים‪ ,‬תמיד קיים מסלול קל ביותר שמשתמש ב פעם אחת לכל היותר‪.‬‬
‫‪-7‬‬
‫‪-6‬‬
‫כל הערכים ‪ ௦‬יהיו נכונים‪.‬‬
‫‬
‫‪−7‬‬
‫‪9‬‬
‫‪24‬‬
‫‪5‬‬
‫אלגוריתמים ‪ - 1‬טכניון ©‬
‫‪6‬‬
‫אלגוריתמים ‪ - 1‬טכניון ©‬
‫אלגוריתם‬
‫תרגיל ‪ – 2‬בעיית ה ‪Arbitrage‬‬
‫קלט‪ :‬גרף מכוון ‪ = ,‬בעל משקלים אי שליליים‪ ,‬למעט קשת ‪ = ,‬שמשקלה שלילי‪.‬‬
‫צומת ∈ ‪.‬‬
‫נתונים סוגי מטבעות‪ .‬שערי החליפין בין כל זוג מטבעות נתונים ע"י מטריצה מסדר × ‪,‬‬
‫פלט‪ :‬משקל מסלול קל ביותר ‪ ௦‬לכל ∈ ‪.‬‬
‫‬
‫תארו אלגוריתם המכריע האם קיימת סדרה של החלפות מטבע‪ ,‬המתחילה ומסתיימת באותו‬
‫‬
‫אחת עבור ‪ ,‬אחת עבור ‪.‬‬
‫המטבע‪ ,‬כך שסדרת ההחלפות תגדיל את כמות הכסף בידכם מאותו מטבע‪.‬‬
‫
‬
‫‬
‫‪ .3‬חשב לכל צומת ∈ ‪:‬‬
‫ ‪
௦ = min ௦ᇱ , ௦ᇱ + + ௕ᇱ‬‬
‫‬
‫נכונות‪ :‬מסלול קל ביותר מצומת לצומת יכול‪:‬‬
‫‪ .1‬לא להשתמש ב ‪ ,‬ואז משקלו ‪.
௦ᇱ‬‬
‫‪ .2‬להגיע ל ‪ ,‬לעבור דרך ‪ = ,‬ולהמשיך ל ‪ ,‬במשקל ‬
‫המסלול הקל ביותר ב הוא הטוב מבין שתי האפשרויות‪.‬‬
‫פתרון‬
‫סדרת החלפות כנ"ל היא סדרה ‪ ଵ , ଶ , … , ௞‬של מטבעות‪ ,‬עבורה מתקיים‪:‬‬
‫‪௜భ,௜మ ⋅ ௜మ,௜య ⋅ … ⋅ ௜ೖషభ ,௜ೖ ⋅ ௜ೖ ,௜భ > 1‬‬
‫‪+ ௕ᇱ‬‬
‫ ‪ +‬‬
‫‪.
௦ᇱ‬‬
‫רעיון‪ :‬נרצה לבצע רדוקציה לבעיית מציאת מעגל בעל משקל שלילי בגרף‪.‬‬
‫‬
‫סיבוכיות‪. + log :‬‬
‫‪7‬‬
‫כלומר‪ ,‬תמורת יחידה אחת של מטבע ניתן לקנות ‪ ௜,௝‬יחידות של מטבע ‪.‬‬
‫‬
‫‪ .1‬בנה את הגרף ‪. ᇱ = , −‬‬
‫‪ .2‬בצע שתי הרצות של אלגוריתם ‪ Dijkstra‬על הגרף ‪. ᇱ‬‬
‫‬
‫כך ש ‪ ௜,௝‬הוא שער החליפין בין המטבעות ‪.,‬‬
‫אלגוריתמים ‪ - 1‬טכניון ©‬
‫‪8‬‬
‫נוכל להכריע האם קיים מעגל בעל משקל שלילי באמצעות אלגוריתם ‪.Bellman-Ford‬‬
‫אלגוריתמים ‪ - 1‬טכניון ©‬
‫פתרון‬
‫אלגוריתם‬
‫מטרה‪ :‬לבדוק האם קיימת סדרה ‪ ଵ , ଶ , … , ௞‬של מטבעות‪ ,‬עבורה מתקיים‪:‬‬
‫קלט‪ :‬מטריצה מסדר × המייצגת שערי חליפין‪.‬‬
‫פלט‪ :‬האם קיימת סדרת החלפות מטבע אשר מייצרת רווח‪.‬‬
‫‪௜భ,௜మ ⋅ ௜మ,௜య ⋅ … ⋅ ௜ೖషభ ,௜ೖ ⋅ ௜ೖ ,௜భ > 1‬‬
‫נסמן לצורך נוחיות ‪.௞ାଵ = ଵ‬‬
‫⇕‬
‫‪ .1‬בנה את הגרף‬
‫‪ .2‬הרץ ‪ Bellman-Ford‬החל מצומת שרירותי *‪ ,‬אשר יסומן ב ‪.‬‬
‫‪௞‬‬
‫‪ log ௜ೕ,௜ೕశభ > 0‬‬
‫‪ .3‬במידה ו ‪ Bellman-Ford‬מצא מעגל שלילי‪ ,‬החזר אותו‪.‬‬
‫‪௝ୀଵ‬‬
‫רדוקציה‪ :‬נבנה גרף‬
‫ × ‪,‬‬
‫* הערה חשובה‪ Bellman-Ford :‬מוצא האם קיים מעגל בעל משקל שלילי אשר ישיג מ ‪.‬‬
‫= ‪ ,‬בו משקל קשת ‪ , ᇱ‬יוגדר להיות‪:‬‬
‫‪= − log ௜,௜ ᇲ‬‬
‫‪, ᇱ‬‬
‫ × ‪,‬‬
‫= עם פונקציית משקל ‪. , ᇱ = − log ௜,௜ ᇲ‬‬
‫‬
‫בגרף זה‪ ,‬משקל מעגל ‪ :ଵ − ଶ − ⋯ − ௞ − ଵ‬הוא‪:‬‬
‫‬
‫כדי למצוא מעגל במשקל שלילי בגרף כללי‪ ,‬לא מספיק להריץ ‪ Bellman-Ford‬מצומת כלשהו‪.‬‬
‫נכונות‪ :‬נובעת מהדיון בשקף הקודם‪.‬‬
‫‪௞‬‬
‫‪௞‬‬
‫‬
‫בשאלה זו‪ ,‬כל קשתות הגרף קיימות ולכן כל מעגל במשקל שלילי ישיג מכל צומת‪.‬‬
‫סיבוכיות‪ :‬שלב ‪) 1‬בניית הגרף( לוקח ‪ ଶ‬זמן‪.‬‬
‫‪ ௝ , ௝ାଵ = − log ௜ೕ ,௜ೕశభ‬‬
‫שלב ‪ 2‬לוקח ‪. = ⋅ ଶ = ଷ‬‬
‫‪௝ୀଵ‬‬
‫‪௝ୀଵ‬‬
‫סה"כ‪. ଷ :‬‬
‫‪9‬‬
‫אלגוריתמים ‪ - 1‬טכניון ©‬
‫‪10‬‬
‫אלגוריתמים ‪ - 1‬טכניון ©‬
‫תרגיל ‪3‬‬
‫תרגיל ‪3‬‬
‫נתונים גרף קשיר ולא מכוון ‪ = ,‬ופונקציית משקל ‪.: → ℝ‬‬
‫נתונים גרף קשיר ולא מכוון ‪ = ,‬ופונקציית משקל ‪.: → ℝ‬‬
‫‪ .1‬נגדיר פונקציית משקל חדשה ‪ : → ℝ‬באופן הבא‪:‬‬
‫‪ = +‬‬
‫) מספר אי שלילי כלשהו(‬
‫‪ .2‬נגדיר פונקציית משקל חדשה ‪ : → ℝ‬באופן הבא‪:‬‬
‫ ∙= ‬
‫הוכח‪/‬הפרך‪ :‬אם מסלול קל ביותר מ ל תחת ‪ ,‬אז הוא מסלול קל ביותר תחת ‪.‬‬
‫הוכח‪/‬הפרך‪ :‬אם מסלול קל ביותר מ ל תחת ‪ ,‬אז הוא מסלול קל ביותר תחת ‪.‬‬
‫פתרון‬
‫פתרון‬
‫הטענה לא נכונה‪ .‬דוגמא נגדית‪:‬‬
‫הטענה נכונה‪ .‬יהא מסלול קל ביותר מ ל תחת ‪.‬‬
‫‬
‫≤ ⋅ = ⋅ = ⋅ = = ‬
‫‬
‫‪2‬‬
‫‪2‬‬
‫‬
‫‪5‬‬
‫‪௘∈௉‬‬
‫‪4‬‬
‫‬
‫‬
‫‪2‬‬
‫‪௘∈௉‬‬
‫‪௘∈௉‬‬
‫ = = ⋅ = ⋅ = ⋅ ≤ ‬
‫‬
‫‪௘∈ொ‬‬
‫‬
‫‬
‫‪11‬‬
‫נניח בשלילה שקיים מסלול מ ל עבורו < ‪.‬‬
‫‬
‫‬
‫) מספר אי שלילי כלשהו(‬
‫‬
‫‪௘∈ொ‬‬
‫‪௘∈ொ‬‬
‫אי השוויון נובע מכך ש ≤ ‪.‬‬
‫אלגוריתמים ‪ - 1‬טכניון ©‬
‫זו סתירה‪ ,‬היות והנחנו כי < ‪.‬‬
‫‪12‬‬
‫אלגוריתמים ‪ - 1‬טכניון ©‬