E N D
תרגיל 14 Union-Find MST
Union Find זמן ריצה: רצף של m פעולות Makeset, Union, Find, ש-n מתוכן הן פעולות Makeset ניתן לביצוע באמצעות יער של קבוצות זרות, עם איחוד לפי דרגה, וכיווץ מסלולים בזמן: , כאשר: עבור כל ערכים ריאליים של ( היא הפונקציה ההפוכה לפונקציית אקרמן), ולכן בכל שימוש מעשי ניתן להתייחס לזה כאל:
שאלה 1 8 8 8
שאלה 1 (ניתוח הפחת)
שאלה 1 הערה: ניתן לפתור שאלה זו גם בעזרת מימוש של union find באמצעות עצים מושרשים, עם איחוד לפי דרגה, וכיווץ מסלולים בזמן: , כאשר: עבור כל ערכים ריאליים של ( היא הפונקציה ההפוכה לפונקציית אקרמן), ולכן בכל שימוש מעשי ניתן להתייחס לזה כאל:
שאלה 2 • HEX הוא משחק לוח שמנוהל ע"ג לוח של משושים (אי-זוגי) ומשתתפים בו שני שחקנים- שחור ולבן. • בכל צעד השחקן שזה תורו, בוחר באחד המשושים הפנויים ומניח עליו אבן בצבע שלו. • מטרתו של השחקן השחור היא ליצור רצף של אבנים שחורות בין הקצה הימני התחתון של הלוח והקצה השמאלי העליון שלו, ומטרת השחקן הלבן ליצור רצף אבנים לבנות בין שני הקצוות האחרים. • הציעו אלגוריתם לניהול המשחק.
שאלה 2 פתרון: • לוח המשחק יהיה מטריצה Board בגודל K×K. • Board[i,j] מסמן את מצבו של המשושה בשורה ועמודה: 0 אם הוא פנוי, 1 אם יש עליו אבן שחורה ו 1− אם יש עליו אבן לבנה. • במהלך המשחק ננהל קבוצות של משושים ונאחד בין רצפים של משושים עם אבנים באותו צבע. • המשושה שמתאים ל-Board[i,j] ייוצג ע"י האיבר <i,j>. בהתחלה, כל משושה מהווה קבוצה נפרדת. • כאשר שחקן בצבע X הניח אבן בצבע שלו על Board[i,j] נאחד את הקבוצה של <i,j> עם כל הקבוצות של המשושים הסמוכים אשר עליהם יש אבנים בצבע X (לפני האיחוד נבדוק לגבי כל משושה סמוך שעליו יש אבן בצבע X אם הוא כבר שייך לקבוצה של <i,j> ואם לא, נאחד בין הקבוצות). • בנוסף, נוסיף עבור כל אחד מארבע קצותיו של הלוח "משושה דמה" (שניים שחורים ושניים לבנים). • כאשר שחקן בצבע X מניח אבן על משושה שנמצא באחד מהקצוות שהוא צריך לחבר (ימין-עליון ושמאל-תחתון עבור X=white וימין-תחתון ושמאל-עליון X=black), נאחד את הקבוצה של המשושה שעליו הונחה האבן גם עם "משושה הדמה" המתאים. • בכדי לבדוק אם שחקן בצבע X ניצח יש לבדוק האם שני משושי-הדמה שלו נמצאים באותה קבוצה.
שאלה 2 ניתוח זמן ריצה: • מספר פעולות ה- makeset הוא כגודל הלוח ועוד ארבע משושי-דמה. • על כל משושה מניחים פעם אחת לכל היותר אבן צבועה • מכיוון שלכל משושה יש לכל היותר ששה שכנים, מבוצע מספר קבוע של בדיקות find ו-union (כולל הבדיקה האם שני משושי-הדמה הם באותה קבוצה). • בסה"כ, O(K2) פעולות MakeSet, Union, Find וזמן הריצה הכללי לניהול המשחק יהיה: • O(K2logK2)= O(K2logK) אם נממש את מבנה הנתוניםבאמצעות רשימות מקושרות עם איחוד לפי דרגה, • אם נממש את מבנה נתונים באמצעות עצים מושרשים עם איחוד לפי דרגה וכיווץ מסלולים.
MST Minimum Spanning Tree (MST) Given a weighted, connected, undirected graph: • A spanning treeis a sub-graph that is a tree and connects all the vertices of the original graph together. • A minimum spanning tree (MST) is a spanning tree with weight less than or equal to the weight of every other spanning tree. • Known algorithms: Prim and Kruskal
MST דוגמה:
Kruskal הדגמה: 2 1 6 5 9 7 8 3 4 10 11
Prim הדגמה: 2 1 r 6 5 9 7 8 3 4 10 11
שאלה 3 נתון גרף לא מכוון וקשיר עם משקלים חיוביים על הצלעות. רוצים למצוא קבוצת צלעות שמכילה צלע אחת לפחות מכל מעגל ב-G ומשקלה מינימאלי.
שאלה 3 פתרון: נמצא עץ פורש מקסימאלי ואז נחזיר את . הסבר: ראשית, נראה שאכן מכילה קשת אחת לכל מעגל. זה נכון משום ש-T לא מכיל מעגלים, כלומר בכל מעגל של G יש לפחות צלע אחת שאינה נמצאת ב-T, כלומר היא נמצאת ב-.
שאלה 3 פתרון, המשך הסבר: כעת נראה ש- ממשקל מינימאלי. נסמן משקל ע"י . נתבונן באיזושהי קבוצת צלעות אחרת, , אשר מכילה צלע אחת לפחות מכל מעגל של G. בגלל ש- מכילה צלע אחת לפחות מכל מעגל של G, ברור שבקבוצה אין מעגלים, כלומר הצלעות ב- הן יער ואפשר להשלים אותן לעץ פורש ומקבלים ש - (הערה: ו -Tלא מכילים צלעות משותפות אבל ייתכן שב- ו- יש צלעות משותפות ולכן משקלם הכללי עשוי להיות יותר גדול). כעת, מכיוון ש- T הוא עץ פורש מקסימאלי, הרי ש- . לכן מקבלים ש- כנדרש.
שאלה 4 יש לתכנן רשת תקשורת עבור n ערים, כאשר מחיר קו בין עיר u ועיר v הוא המרחק בין שתי הערים (בקו אווירי). יש לתכנן רשת תקשורת כך שמחירה יהיה מינימאלי תוך התחשבות בתנאים הבאים: • חלק מהערים כבר מחוברות ביניהן ע"י קווי תקשורת ולכן ניתן לחסוך בהקמת הרשת החדשה ע"י שימוש בתשתיות קיימות. • בחלק מן הערים (שאינן מחוברות לתשתיות קיימות) קמו ארגוני ירוקים שמתנגדים לחיבור קווי תקשורת ואנחנו מעוניינים לחבר את אותן ערים למספר קטן ככל האפשר של קווי תקשורת, כלומר למזער את מספרם של קווי התקשורת ברשת אשר מחוברים לאיזושהי עיר "ירוקה". הציעו אלגוריתם למציאת רשת בעלות מינימאלית.
שאלה 4 פתרון: רדוקציה לבעיית MST: • נייצג את הערים וקווי התקשורת ע"י גרף כאשר נעניק לכל זוג ערים משקל עבור הצלע שמחברת אותם באופן הבא: • כל קווי התקשורת הקיימים יקבלו משקל 0. • כל קווי התקשורת האחרים אשר אינם מקושרים לעיר שבה יש ארגוני-ירוקים יקבלו את המשקל של עלות הקמתם. • לבסוף, נסמן ב-X את המרחק המקסימאלי של שתי ערים כלשהן. עבור קווי התקשורת שקשורות לעיר או ערים שבהן יש ארגוני ירוקים, נעניק לצלע משקל שהוא המרחק בין שתי הערים + X. על הרשת שנוצרה נחשב MST.
שאלה 4 פתרון, הסבר: נבחן את התנהגותו של האלגוריתם של קרוסקל לחישוב MST על הגרף שהגדרנו: • בסדר המיון של הצלעות, יופיעו בהתחלה כל הצלעות שמייצגות קווי-תקשורת קיימים, אח"כ כאלו המייצגות קוי-תקשורת לערים "לא-ירוקות" ולבסוף צלעות המייצגות קווי-תקשורת לערים "ירוקות". • לכן, בהתחלה הוא יבחר קווי תקשורת קיימים והוא יעבור לבחור צלעות שיש להן משקל גדול מ-0 רק לאחר שימצה את האפשרות לבחור צלעות במשקל 0. לאחר מכן, יבחר מתוך הצלעות שמייצגות קוי-תקשרות של ערים "לא-ירוקות" ויעבור לבחור קווים לערים ירוקות רק לאחר שימצה את האפשרות לצלעות אחרות.
שאלה 5 מפקד של רשת ריגול צריך למסור הודעה לכל N הפעילים בקבוצה , ההודעה כמובן צריכה להישאר סודית. לכל שני פעילים i,j הנמצאים בקשר יש הסתברות ידועה שאם i מעביר את ההודעה ל-j ההודעה תתגלה. המטרה של המפקד היא לתכנן את רשת העברת ההודעה כך המידע יגיע לכל הפעילים תוך מזעור הסתברות גילוי ההודעה. מה יעשה?
שאלה 5 פתרון: נבנה גרף על כל הפעילים, כאשר יש צלע בין כל שני פעילים הנמצאים בקשר. אנחנו רוצים שההודעה תגיע לכל הפעילים ולכן מחפשים תת-גרף בו יש מסלול מהצומת s, המייצג את המפקד לכל הפעילים, כלומר, תת-גרף קשיר. בתת-גרף האופטימאלי עבורנו לא יופיע מעגל, מכיוון שלו היה מעגל היה ניתן לזרוק צלע במעגל בלי לפגוע בקשירות ותוך הפחתת הסיכון להתגלות, ולפיכך לא היה אופטימאלי. ולכן אנחנו מחפשים עץ פורש בגרף עבורו ההסתברות לגילוי ההודעה מינימאלי. ההסתברות לאי-גילוי ההודעה עבור צלע בודדת הוא ולכן ההסתברות הכללית לאי גילוי ההודעה עבור תת-עץ T כלשהו הוא: על פני כל כלומר אנחנו מחפשים עץ T עבורו על פני כל הוא מקסימלי.
שאלה 5 פתרון, המשך: נשתמש בכך ש ()log היא פונקציה מונוטונית עולה ולכן מחפשים T כך ש מקסימלי. ולכן שקול למציאת עץ פורש מקסימלי בגרף שלנו כאשר משקל צלע הוא או לחלופין למציאת MST כאשר משקל צלע הוא . ( הוא מספר חיובי).
שאלה 6 האם אפשר לפתור הבעיה הקודמת ללא השימוש בפונקציה log()? פתרון: למעשה אפשר להריץ MST כאשר משקל צלע (i,j) הוא (P(i,j!! בריצת prim על הגרף תחת כל אחת משני המישקולים השונים אותה הצלע תבחר בכל שלב! כאשר (P(i,j מינימלי בכל שלב אם"ם-log(1-P(i,j))מינימלי. (כלומר, הפתרון הקודם רק מסביר למה זה עובד). אפשר למעשה להשתמש בטענה הנ"ל בכל פונקציה מונוטונית