14 תרגיל Union-Find MST Union Find Union Find זמן ריצה : רצף של m פעולות Makeset, Union, ,Find ש n- מתוכן הן פעולות Makeset ניתן לביצוע באמצעות יער של.

Download Report

Transcript 14 תרגיל Union-Find MST Union Find Union Find זמן ריצה : רצף של m פעולות Makeset, Union, ,Find ש n- מתוכן הן פעולות Makeset ניתן לביצוע באמצעות יער של.

14 ‫תרגיל‬
Union-Find
MST
Union Find
‫‪Union Find‬‬
‫זמן ריצה‪ :‬רצף של ‪ m‬פעולות ‪Makeset, Union,‬‬
‫‪ ,Find‬ש‪ n-‬מתוכן הן פעולות ‪ Makeset‬ניתן לביצוע‬
‫באמצעות יער של קבוצות זרות‪ ,‬עם איחוד לפי‬
‫דרגה‪ ,‬וכיווץ מסלולים בזמן‪,𝑶 𝒎 ∙ 𝛂 𝒎,𝒏 :‬‬
‫כאשר‪ 𝛂 𝒎,𝒏 ≤ 𝟒 :‬עבור כל ערכים ריאליים של‬
‫𝒎‪ 𝛂 𝒎,𝒏 ( 𝒏,‬היא הפונקציה ההפוכה לפונקציית‬
‫אקרמן)‪ ,‬ולכן בכל שימוש מעשי ניתן להתייחס לזה‬
‫כאל‪𝑶 𝒎 :‬‬
‫שאלה ‪1‬‬
‫שאלה ‪1‬‬
‫שאלה ‪1‬‬
‫‪8‬‬
‫‪8‬‬
‫‪8‬‬
‫שאלה ‪1‬‬
‫שאלה ‪1‬‬
‫(ניתוח‬
‫הפחת)‬
‫שאלה ‪1‬‬
‫שאלה ‪1‬‬
‫שאלה ‪1‬‬
‫שאלה ‪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‬אם נממש את מבנה הנתונים באמצעות‬
‫רשימות מקושרות עם איחוד לפי דרגה‪,‬‬
‫– ‪ 𝑂 𝑘 2 ∙ α 𝑐𝑘 2 ,𝑘 2 ≈ 𝑂 𝑘 2‬אם נממש את מבנה נתונים‬
‫באמצעות עצים מושרשים עם איחוד לפי דרגה וכיווץ מסלולים‪.‬‬
MST
Minimum Spanning Tree (MST)
Given a weighted, connected, undirected graph:
• A spanning tree is 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‬‬
‫דוגמה‪:‬‬
MST
The algorithm starts with |V|
different trees (each tree
consists of one of the vertices
in V).
Kruskal
At each step unions two trees
by adding the edge with
minimal weight that doesn't
creates a cycle.
Kruskal
:‫הדגמה‬
2
1
6
8
5
9
7
3
4
10
11
MST
Kruskal
MST-Kruskal(G, w)
A←Ø
for each vertex v  V(G)
Make-Set(v)
sort the edges in E(G) by non-decreasing weight w
for each edge (u,v)  E(G) in order by non-decreasing weight
if Find-Set(u) ≠ Find-Set(v)
A ← A  {(u,v)}
Union(u,v)
return A
Complexity:
Assuming that the optimized union-find is used the runtime is
ElogE = 𝑂 ElogV .
MST
The algorithm starts with a tree T={r} (tree consisting of a
single vertex) and extends it until it spans all the vertices in
V(G).
Prim
At each step the minimal weight edge of all the edges
connecting T to the vertices that have not been covered by T yet
is added to T.
key[u] =min{w(u,v): (u,v)E(G) and vT}
Prim
:‫הדגמה‬
2
r
1
6
8
5
9
7
3
4
10
11
MST
Prim
key[u] =min{w(u,v): (u,v)E(G) and vT}
MST-Prim (G, w, r)
Q ← V(G)
for each v  Q
key[v] ← ∞
key[r] ← 0
π[r] ← NIL
while Q ≠ Ø
v ← Extract-Min(Q)
for each u  Adj[v]
if u  Q and w(v,u) < key[u]
π[u] ← v
key[u] ← w(v,u)
decreaseKey (Q, u)
Complexity:
Using a binary heap the runtime is 𝑂 𝑉𝑙𝑜𝑔𝑉 + 𝐸𝑙𝑜𝑔𝑉 =
𝑂(𝐸𝑙𝑜𝑔𝑉) .
‫שאלה ‪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‬הנמצאים בקשר יש הסתברות‬
‫ידועה ‪ 0 < 𝑃 𝑖,𝑗 < 1‬שאם ‪ i‬מעביר את ההודעה ל‪-‬‬
‫‪ j‬ההודעה תתגלה‪.‬‬
‫המטרה של המפקד היא לתכנן את רשת העברת‬
‫ההודעה כך המידע יגיע לכל הפעילים תוך מזעור‬
‫הסתברות גילוי ההודעה‪.‬‬
‫מה יעשה?‬
‫שאלה ‪5‬‬
‫פתרון‪:‬‬
‫נבנה גרף על כל הפעילים‪ ,‬כאשר יש צלע בין כל שני פעילים‬
‫הנמצאים בקשר‪.‬‬
‫אנחנו רוצים שההודעה תגיע לכל הפעילים ולכן מחפשים תת‪-‬‬
‫גרף בו יש מסלול מהצומת ‪ ,s‬המייצג את המפקד לכל הפעילים‪,‬‬
‫כלומר‪ ,‬תת‪-‬גרף קשיר‪.‬‬
‫בתת‪-‬גרף האופטימאלי עבורנו לא יופיע מעגל‪ ,‬מכיוון שלו היה‬
‫מעגל היה ניתן לזרוק צלע במעגל בלי לפגוע בקשירות ותוך‬
‫הפחתת הסיכון להתגלות‪ ,‬ולפיכך לא היה אופטימאלי‪.‬‬
‫ולכן אנחנו מחפשים עץ פורש בגרף עבורו ההסתברות לגילוי‬
‫ההודעה מינימאלי‪.‬‬
‫ההסתברות לאי‪-‬גילוי ההודעה עבור צלע בודדת הוא ‪1‬‬
‫‪ − P i,j‬ולכן ההסתברות הכללית לאי גילוי ההודעה עבור תת‪-‬‬
‫על פני כל 𝑇 ∈ 𝑗‪𝑖,‬‬
‫עץ ‪ T‬כלשהו הוא‪1 − P i,j :‬‬
‫על פני כל‬
‫כלומר אנחנו מחפשים עץ ‪ T‬עבורו ‪1 − P i,j‬‬
‫𝑇 ∈ 𝑗‪ 𝑖,‬הוא מקסימלי‪.‬‬
‫שאלה ‪5‬‬
‫פתרון‪ ,‬המשך‪:‬‬
‫נשתמש בכך ש ()‪ log‬היא פונקציה מונוטונית עולה‬
‫ולכן מחפשים ‪ T‬כך ש‬
‫𝑗‪1 − 𝑃 𝑖,‬‬
‫𝑗‪= Σ log 1 − 𝑃 𝑖,‬‬
‫מקסימלי‪.‬‬
‫ולכן שקול למציאת עץ פורש מקסימלי בגרף שלנו‬
‫כאשר משקל צלע 𝑗‪ 𝑖,‬הוא ‪log 1 − P i,j‬‬
‫או לחלופין למציאת ‪ MST‬כאשר משקל צלע 𝑗‪ 𝑖,‬הוא‬
‫𝑗‪.− 𝑙𝑜𝑔 1 − 𝑃 𝑖,‬‬
‫(‬
‫𝑗‪ −𝑙𝑜𝑔 1 − 𝑃 𝑖,‬הוא מספר חיובי)‪.‬‬
‫‪log‬‬
‫שאלה ‪6‬‬
‫האם אפשר לפתור הבעיה הקודמת ללא השימוש‬
‫בפונקציה )(‪? log‬‬
‫פתרון‪:‬‬
‫למעשה אפשר להריץ ‪ MST‬כאשר משקל צלע )‪ (i,j‬הוא‬
‫(‪!!P(i,j‬‬
‫בריצת ‪ prim‬על הגרף תחת כל אחת משני המישקולים‬
‫השונים אותה הצלע תבחר בכל שלב!‬
‫כאשר (‪ P(i,j‬מינימלי בכל שלב אם"ם ))‪-log(1-P(i,j‬‬
‫מינימלי‪.‬‬
‫(כלומר‪ ,‬הפתרון הקודם רק מסביר למה זה עובד)‪.‬‬
‫אפשר למעשה להשתמש בטענה הנ"ל בכל פונקציה‬
‫מונוטונית‬