מבני נתונים ואלגוריתמים - מחברת קורס/גרפים/אלגוריתמים למציאת עפ"מ
דף זו עוסק באלגוריתם למציאת ההעץ הפורש הזול ביותר בגרף לא מכוון בעל טבלת עלויות לקשתות.
כדאי לדעת: בספר הקורס, הפרק "Minimum Spanning Tree" מכסה נושא זה. |
הבעיה
[עריכה]נתונים גרף לא מכוון וטבלת עלויות לקשתות . רוצים לדעת מהי קבוצת הקשתות הזולה ביותר כך שכל שני צמתים יהיו מחוברים.
דוגמה: בתרשים הבא, המספרים שבקשתות מציינים את עלותן. קבוצת הקשתות הזולה ביותר שתחבר כל שני צמתים, היא . קשתות קבוצה זו מודגשות בתרשים הבא. |
הרעיון הכללי
[עריכה]כבר ראינו (בעצים) "אלגוריתם" למציאת עץ פורש. נשנה אותו מעט:
# Takes a connected undirected graph (G) and a cost table (Edge-Costs)
# Returns a set of edges E' such that (V(G), E') is
# a MST (minimum spanning tree).
Grow-MST(G, Edge-Costs)
1 V= V(G)
2 E' = {}
3 while (V, E') isn't a tree
4 e = some (u, v): u, v are from different trees; e is a light edge
5 E' = E' ∪ {e}
6 return E'
כלומר, השינוי היחידי הוא שעתה אנו בוחרים בכל איטרציה קשת קלה. מיד נעסוק בשאלה מהן קשתות קלות ומה חשיבותן. בהמשך נראה שני אלגוריתמים שהם מקרים פרטיים של "אלגוריתם" זה.
קשתות קלות
[עריכה]
הגדרה: נתון גרף (לא מכוון) . נניח ש מייצרת יער מ. היא קשת קלה אם:
|
שימו לב: ספר הקורס מגדיר "קשת קלה" בצורה מעט שונה מההגדרה כאן. אין הבדל רב בין ההגדרות והמשפטים, אך ייתכן שההצגה בדף זה פשוטה מעט יותר, והיא מספיקה לחומר שנלמד בקורס. |
דוגמה: בתרשים הבא, A מראה גרף ; קבוצת הקשתות המודגשות, , אכן מייצרת יער. B מראה את כל אחד משלושת העצים מסומן באליפסה. בגרף זה:
|
המשפט הקשת הקלה - קשת בטוחה
[עריכה]המשפט הבא ידוע בשם Light Edge - Safe Edge, והוא אחד המשפטים המפורסמים יותר בגרפים:
משפט: קשת קלה - קשת בטוחה נתון גרף (לא מכוון) . נניח ש מייצרת יער מ, ויותר מכך, נניח ש היא תת-קבוצה של קשתות עפ"מ (עץ פורש מינימום - או עץ פורש שהוא הזול ביותר מבין כל העצים הפורשים). אם היא קשת קלה, אז גם תת קבוצה של קשתות עפ"מ. |
לפני שנוכיח את המשפט, נשים לב להשלכותיו.
שימו לב: ברעיון הכללי ראינו "פסוודו-קוד" למציאת עפ"מ. על פי משפט זה, של 3-5 שלGrow-MST יבנו עפ"מ.
|
כעת נוכיח את המשפט.
הוכחה: ננסח מחדש את הטענה. נניח גרף קשיר לא-מכוון כלשהו. אם בחרנו תת-קבוצה של קשתות עפ"מ, ואחד העצים הוא , אז יש גם עפ"מ הכולל את הקשת הקלה היוצאת מ.
בתרשים הבא, לדוגמה, אם הקשתות המייצרות את העצים , , , , , ו אכן חלק מעפ"מ כלשהו - אז הקשת שעלותה 10 (המחברת בין צומת כלשהו בלצומת כלשהו ב) גם היא (יחד עם הקשתות שנבחרו עד כה) חלק מעפ"מ כלשהו.
לצורך ההוכחה, נניח שקיבלנו שהתבקשנו בשיעורי הבית למצוא עפ"מ ל. (למרבה החלחלה והזעזוע) לא פתרנו את שיעורי הבית, ובמקום זאת התקשרנו לחבר שפתר את הבעיה (כלומר מצא עפ"מ), וביקשנו שיקריא לנו את התשובה. נשים לב לדברים הבאים:
- התשובה היא בסה"כ רשימה של קשתות .
- ההנחה היא שהחבר אכן מצא עפ"מ ללא טעות.
- על אף האמור בסעיף הקודם, ייתכנו שיחות שונות שבהן יקריא החבר רשימות קשתות שונות זו מזו:
- איננו יודעים בוודאות שקיים עפ"מ יחיד.
- אם רשימת קשתות כלשהי אכן מייצרת עפ"מ, אז גם כל פרמוטציה שלה מייצרת עפ"מ.
מהסעיף הקודם נוכל להסיק שתי מסקנות:
- קיימת לפחות שיחת טלפון אחת בה בשלב כלשהו החבר הקריא תת-קבוצה שיוצרת את העצים שברשותנו כרגע. ככלות הכל, הנחנו שיש בידינו תת-קבוצה של קשתות עפ"מ.
- כל שעלינו להוכיח הוא שקיימת לפחות שיחה אחת בה ימשיך החבר ויקריא את הקשת הקלה היוצאת מ.
שימו לב: וודא שהנך מבין מדוע איננו חייבים להוכיח שבכל שיחה יקריא לנו החבר את הקשת הקלה היוצאת מ. |
לאחר שהקריא החבר את תת-קבוצת הקשתות המובילות לתרשים שראינו לעיל, משתהה הוא כדי לכחכח בגרונו. אנו מנצלים את הזמן כדי לנחש איזו קשת יבחר הוא מבין הקשתות היוצאות מ. בשאר ההוכחה נוכיח שיש לפחות שיחה אחת בה הוא ימשיך בשיחה ויבחר את הקשת הקלה היוצאת מ. התרשים הבא, לדוגמה, מראה את היער שמתקבל לאחר שהחבר סיים הקריא לנו את כל הקשתות בהן הוא השתמש שאינן מחברות בין לעץ אחר:
כעת, כל עץ שנותר בהכרח יתחבר ישירות ל, וזאת מפני שהחבר סיים להקריא לנו את כל הקשתות למעט אלו המחברות ל. אם זה המצב, אז נוכל להתעלם מהקשתות שאינן מחברות בין לעץ אחר.
התרשים הבא, לדוגמה, מראה את היער שמתקבל לאחר שמשמיטים את הקשתות שלבטח לא יקריא יותר החבר בשיחה זו::
בנקודה זו, ברור לחלוטין שעבור כל עץ שנותר, החבר יבחר בקשת הזולה ביותר המחברת את אליו. בפרט, החבר יהיה חייב לבחור (בשיחה זו) בקשת הקלה היוצאת מ.
שימו לב: נשים לב לנקודה הבאה (בה נוטים להתבלבל מדי שנה). משמעות המשפט היא: הקשת הקלה בטוחה לשימוש. משמעות המשפט איננה: בטוח משתמשים בקשת הקלה.כלומר, אם יש יער שנוצר מתת-קבוצת קשתות עפ"מ, ו היא הקשת הקלה ביותר היוצאת מאחד העצים, אז בטוח מותר להשתמש בה, אבל לא בטוח שכל עפ"מ משתמש בה. |
הקשר לאלגוריתמים אחרים בגרפים
[עריכה]כדאי לדעת: בקורס נלמד מספר אלגוריתמים (ודמויי-אלגוריתמים) לבניית עץ פורש. הם מתוארים בתרשים הבא:
|
הפרק הקודם: אלגוריתם Union-Find |
אלגוריתמים למציאת עפ"מ תרגילים |
הפרק הבא: אלגוריתם Kruskal |