מבני נתונים ואלגוריתמים - מחברת קורס/גרפים/מסלולים זולים לכלל הזוגות

דף זה הוא הראשון מבין שלושה דפים העוסקים באלגוריתמים למציאת המסלול הזול ביותר בגרף מכוון בין כל שני צמתים.


כדאי לדעת:

אלגוריתם Dijkstra עסקנו בבעיה דומה, אלא ששם היינו צריכים למצוא את המסלולים הזולים מצומת מוצא מסוים, ולא בין כל שני זוגות כמו כאן.
  1. בספר הקורס, הפרק "All-Pairs Shortest Paths" מכסה נושא זה.


הבעיה

עריכה

נתונים גרף מכוון   וטבלת עלויות לקשתות  . בהינתן צמתים  , רוצים למצוא את המסלול הזול ביותר מ  ל .


 

שימו לב:

בדף זה לא נעסוק במחירי קשתות שאינם חיוביים.




דוגמה:

בגרף בתרשים הבא, המספר המצויין על כל קשת הוא עלות הקשת.

 
בעיית המסלולים הזוגים לכלל הזוגות.
  1. המסלול הזול ביותר מ  ל , לדוגמה, הוא  , ועלותו 2.
  2. המסלול הזול ביותר מ  ל , לדוגמה, הוא  , ועלותו 11.
  3. אין מסלול מ  ל , ולכן עלות המסלול הזול ביותר היא  .


הקלט

עריכה

כפי שנאמר מקודם, נניח שמחירי הקשתות נתונות ע"י טבלת עלויות. בד"כ אנו מניחים שזה נעשה על ידי טבלת ערבול על הקשתות, אך כאן נניח משהו שונה במקצת. נניח שEdge-Costs היא מטריצה שלה כניסהEdge-Costs[u][v] לכל שני צמתים (כלומר, אף פעם לא מוחזר הערך Nil, כבטבלת ערבול). הערך Edge-Costs[u][v], הוא:

  1. 0, אם  .
  2. מחיר הקשת מu לv, אם יש קשת כזו.
  3.  , אם אין קשת כזו, ו .
 

כדאי לדעת:

במידה מסויימת, הוספת הכניסות לEdge-Costs "מוסיפה" לגרף קשתות בעלות משקלים 0 ו .

סטודנטים להנדסה יזהו אולי דמיון למעגלים חשמליים, בהם:

  1. אם יש נתק בין שני ענפים, מותר להוסיף ביניהם ענף בעל התנגדות אינסופית.
  2. מותר להוסיף בין כל שתי נקודות בעלי פוטנציאל זהה (בפרט, כששתי הנקודות למעשה אותה נקודה) ענף בעל התנגדות 0.




דוגמה:

בתרשים הבא, A מראה שוב את הגרף שראינו לעיל. B מראה קשתות ש"נוספו" בגלל 3, וC קשתות ש"נוספו" בגלל 2.

 
הקלט לבעיה.


קל לראות שהתוספות הנ"ל אינן משנות דבר משמעותי:



משפט:

אין הבדל בין מחירי המסלולים הזולים ביותר בגרף המקורי לאלה שבגרף ה"מוסף".


הרעיון הכללי

עריכה
 

כדאי לדעת:

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


הפרק הקודם:
אלגוריתם Dijkstra
מסלולים זולים לכלל הזוגות
תרגילים
הפרק הבא:
אלגוריתם "הכפלת מטריצות"