מבני נתונים ואלגוריתמים - מחברת קורס/מבני נתונים/מבני נתונים לקבוצות זרות/תרגילים
מראה
עוד חסמים
[עריכה]שאלה
[עריכה]ראינו שני מימושים למבנה נתונים המתאר קבוצות זרות ע"י מערך של רשימות מקושרות: מימוש רשימות נאיבי מאחד שתי קבוצות בלי קשר לגדלן, ומימוש רשומות עם איחוד עפ"י גודל מאחד את הקבוצה הקטנה לתוך הקבוצה הגדולה.
- עבור המימוש הראשון, אנא מצא סדרת פעולות, שמתוכן הן פעולות
Make-Set
, שסיבוכיותה הכוללת היא . - עבור המימוש השני, אנא מצא סדרת פעולות, שמתוכן הן פעולות
Make-Set
, שסיבוכיותה הכוללת היא .
שימו לב: בסעיף השני הזנח שגיאות עיגול, או, לחלופין, הנח ש הוא חזקה שלמה של 2. |
תשובה
[עריכה]שני הפתרונות מתחילים בצורה זהה. מייצרים מערך של קבוצות זרות (1-3). מכאן ואילך הפתרונות מתחלקים לפי הסעיף:
סדרת פעולות עבור המימוש הנאיבי
[עריכה]עוברים בלולאה (4-5) על איברי המערך (משמאל לימין), ומצרפים כל קבוצה לקבוצה שלפניה:
1 Sets = Make-Array(n)
2 for i in [1, ..., n]
3 Sets[i] = Make-Set()
4 for i in [1, ..., n - 1]
5 Union(Sets[i + 1], Sets[i])
הסיבוכיות של 4-5 הנה:
סדרת פעולות עבור איחוד רשימות על פי גודל
[עריכה]עובדים בשלבים, כשכל שלב מכיל לולאה. בשלב הראשון מאחדים את קבוצה 1 עם קבוצה 2, את קבוצה 3 עם קבוצה 4, וכולי. בשלב השני מאחדים את קבוצה 1 עם קבוצה 3, את קבוצה 5 עם קבוצה 7, וכולי. ממשיכים בשלבים עוד ועוד, עד שכל הקבוצות מאוחדות לקבוצה אחת גדולה:
1 Sets = Make-Array(n)
2 for i in [1, ..., n]
3 Sets[i] = Make-Set()
4 d = 0
5 while n / 2^d > 1
6 j = 1
7 while j < n
8 Union(Sets[j], Sets[j + 2^d])
9 j = j + 2 · 2^d
10 d = d + 1
הסיבוכיות של 5-10 הנה: