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 vT}
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 vT}
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
מינימלי.
(כלומר ,הפתרון הקודם רק מסביר למה זה עובד).
אפשר למעשה להשתמש בטענה הנ"ל בכל פונקציה
מונוטונית