Presentation is loading. Please wait.

Presentation is loading. Please wait.

ערמות בינומיות ופיבונצ'י

Similar presentations


Presentation on theme: "ערמות בינומיות ופיבונצ'י"— Presentation transcript:

1 ערמות בינומיות ופיבונצ'י
מבני נתונים 08 ערמות בינומיות ופיבונצ'י

2

3 ערמות make-heap Operation insert find-min delete-min union
decrease-key delete 1 Binary Heap log n n Binomial Heap Fibonacci Heap † Relaxed Heap Linked List is-empty † amortized n = number of elements in priority queue 3

4 תזכורת: Heaps עץ בינארי מלא החוק הבסיסי הפעולות הנתמכות
אם צומת B צאצא של צומת A אזי Key(A)≤Key(B) הפעולות הנתמכות Find-min Delete-min Decrease-key Insert Merge 4

5 תזכורת: Binomial Heaps
תחילה נגדיר Binomial Tree: עץ בינומי מדרגה 0 מכיל צומת יחידה עץ בינומי מדרגה k הוא בעל שורש מדרגה k ילדיו הינם עצים בינומיים מדרגות k-1,k-2,…,0 (בסדר זה) עץ בינומי מדרגה k מכיל 2k צמתים והינו בגובה k 5

6 תזכורת: Binomial Heaps
איחוד שני עצים בינומיים מסדר k-1 ניצור עץ בינומי מסדר k ע"י תליית אחד העצים כבן השמאלי ביותר של העץ השני 6

7 תזכורת: Binomial Heaps
סט עצים בינומיים המקיימים את התכונות הבאות כל עץ מקיים את תכונת minimum-heap (כל צאצא גדול מההורה שלו) עבור כל סדר k של עץ בינומי, יש 0 או 1 עצים כאלו ב-heap 7

8 תזכורת: Binomial Heaps
פעולת Merge של שני עצים מדרגה k function mergeTree(p, q) if p.root <= q.root return p.addSubTree(q) else return q.addSubTree(p) end 8

9 תזכורת: Binomial Heaps
פעולת Insert ניצור heap חדש המכיל את האבר החדש, ונבצע merge בין שני ה-heaps פעולת minimum עלינו לחפש את הערך המינימלי מבין שורשי העצים בheap פעולת delete-min מצא את האבר ומחק אותו הפוך את בניו ל-binomial heap ומזג את שני ה-heaps פעולת Decrease-min בדומה לפעולות ב-heap רגיל פעולת Delete שנה את הערך ל-∞ ובצע delete-min הדגמה באנימציה של Binomial Heaps: 9

10 Properties of binomial trees
1) | Bk | = 2k 2) degree(root(Bk)) = k 3) depth(Bk) = k ==> The degree and depth of a binomial tree with at most n nodes is at most log(n). Define the rank of Bk to be k

11 Binomial heaps (ops cont.)
Basic operation is meld(h1,h2): Like addition of binary numbers. B5 B4 B2 B1 h1: B4 B3 B1 B0 + h2: B4 B3 B0 B5 B4 B2

12 תארו מבנה נתונים אנלוגי לערמה בינומית (binomial heap)
נגדיר עצים בינומיים "שמנים" בצורה הבאה: עץ בינומי "שמן" מדרגה 0 מכיל צומת אחד בלבד. עץ בינומי "שמן" מדרגה k ניתן לבנות משלושה עצים בינומיים "שמנים" מדרגה k-1 כאשר נתלה שניים מהם על העץ השלישי. תארו מבנה נתונים אנלוגי לערמה בינומית (binomial heap) המשתמש בעצים "שמנים".

13 ערמה בינומית "שמנה" מוגדרת בצורה הבאה: בערמה יש n עצים בינומיים "שמנים" כאשר יש לכל היותר 2 עצים מדרגה k, לכל k. שורשי העצים מחוברים ביניהם ברשימה מקושרת. הפעולות מוגדרות בדומה לערמה בינומית רגילה וכאשר יש צורך לעשות merge בין העצים (יש יותר משני עצים מדרגה k) בונים משלושה עצים מדרגה k עץ יחיד מדרגה k+1.

14 תארו פעולת meld של שתי ערמות בינומיות "שמנות" שהגדרתם בסעיף הקודם.

15 ערמות פיבונאצ'י make-heap Operation insert find-min delete-min union
decrease-key delete 1 Binary Heap log n n Binomial Heap Fibonacci Heap † Relaxed Heap Linked List is-empty † amortized n = number of elements in priority queue

16 ערימות פיבונאצ'י - מבנה Fibonacci heap. Set of heap-ordered trees.
Maintain pointer to minimum element. Set of marked nodes. each parent larger than its children roots heap-ordered tree 17 24 23 7 3 set -> unordered 30 26 46 18 52 41 Heap H 35 39 44

17 ערימות פיבונאצ'י - מבנה Fibonacci heap. Set of heap-ordered trees.
Maintain pointer to minimum element. Set of marked nodes. find-min takes O(1) time min 17 24 23 7 3 set -> unordered 30 26 46 18 52 41 Heap H 35 39 44

18 ערימות פיבונאצ'י - מבנה Fibonacci heap. Set of heap-ordered trees.
Maintain pointer to minimum element. Set of marked nodes. use to keep heaps flat (stay tuned) min 17 24 23 7 3 set -> unordered 30 26 46 18 52 41 Heap H 35 marked 39 44

19 Cascading cuts & Successive linking
פעולת delete-min יודעים מי המינימום בערימה נתלה את הבנים שלו כעצים בערימה נבצע successive linking – מכל דרגה עץ יחיד! min 7 24 23 17 3 30 26 46 18 52 41 35 39 44

20 Cascading cuts & Successive linking
פעולת delete-min יודעים מי המינימום בערימה נתלה את הבנים שלו כעצים בערימה נבצע successive linking – מכל דרגה עץ יחיד! min 7 24 23 17 18 52 41 39 44 30 26 46 35

21 Cascading cuts & Successive linking
פעולת delete-min יודעים מי המינימום בערימה נתלה את הבנים שלו כעצים בערימה נבצע successive linking – מכל דרגה עץ יחיד! עלות הפעולה: Amortized O(rank(H)) min 7 52 18 24 17 30 41 39 26 46 23 44 35

22 Cascading cuts & Successive linking
פעולת decrease-key אינטואיציה: אם חוק הערמה לא מופר, פשוט נשנה את ערך הצומת אחרת נחתוך את תת העץ של הצומת ונתלה כעץ חדש בכדי לשמור על עצים שטוחים יחסית, ברגע שחותכים בן שני לצומת מסוים, גם הוא נתלה כעץ חדש min 7 18 38 marked node: one child already cut 24 17 23 21 39 41 26 46 30 52 35 88 72

23 Fibonacci Heaps: Decrease Key
Case 1. [heap order not violated] Decrease key of x. Change heap min pointer (if necessary). min 7 18 38 24 17 23 21 39 41 26 29 46 30 52 x 35 88 72 decrease-key of x from 46 to 29

24 Fibonacci Heaps: Decrease Key
Case 1. [heap order not violated] Decrease key of x. Change heap min pointer (if necessary). min 7 18 38 24 17 23 21 39 41 26 29 30 52 x 35 88 72 decrease-key of x from 46 to 29

25 Fibonacci Heaps: Decrease Key
Case 2a. [heap order violated] Decrease key of x. Cut tree rooted at x, meld into root list, and unmark. If parent p of x is unmarked (hasn't yet lost a child), mark it; Otherwise, cut p, meld into root list, and unmark (and do so recursively for all ancestors that lose a second child). min 7 18 38 24 17 23 21 39 41 p 26 29 15 30 52 x 35 88 72 decrease-key of x from 29 to 15

26 Fibonacci Heaps: Decrease Key
Case 2a. [heap order violated] Decrease key of x. Cut tree rooted at x, meld into root list, and unmark. If parent p of x is unmarked (hasn't yet lost a child), mark it; Otherwise, cut p, meld into root list, and unmark (and do so recursively for all ancestors that lose a second child). min 7 18 38 24 17 23 21 39 41 p 26 15 30 52 x 35 88 72 decrease-key of x from 29 to 15

27 Fibonacci Heaps: Decrease Key
Case 2a. [heap order violated] Decrease key of x. Cut tree rooted at x, meld into root list, and unmark. If parent p of x is unmarked (hasn't yet lost a child), mark it; Otherwise, cut p, meld into root list, and unmark (and do so recursively for all ancestors that lose a second child). x min 15 7 18 38 72 24 17 23 21 39 41 p 26 30 52 35 88 decrease-key of x from 29 to 15

28 Fibonacci Heaps: Decrease Key
Case 2a. [heap order violated] Decrease key of x. Cut tree rooted at x, meld into root list, and unmark. If parent p of x is unmarked (hasn't yet lost a child), mark it; Otherwise, cut p, meld into root list, and unmark (and do so recursively for all ancestors that lose a second child). x min 15 7 18 38 72 24 24 17 23 21 39 41 p mark parent 26 30 52 35 88 decrease-key of x from 29 to 15

29 Fibonacci Heaps: Decrease Key
Case 2b. [heap order violated] Decrease key of x. Cut tree rooted at x, meld into root list, and unmark. If parent p of x is unmarked (hasn't yet lost a child), mark it; Otherwise, cut p, meld into root list, and unmark (and do so recursively for all ancestors that lose a second child). min 15 7 18 38 72 24 24 17 23 21 39 41 p 26 30 52 decrease-key of x from 35 to 5 x 5 35 88

30 Fibonacci Heaps: Decrease Key
Case 2b. [heap order violated] Decrease key of x. Cut tree rooted at x, meld into root list, and unmark. If parent p of x is unmarked (hasn't yet lost a child), mark it; Otherwise, cut p, meld into root list, and unmark (and do so recursively for all ancestors that lose a second child). min 15 7 18 38 72 24 24 17 23 21 39 41 p 26 30 52 decrease-key of x from 35 to 5 x 5 88

31 Fibonacci Heaps: Decrease Key
Case 2b. [heap order violated] Decrease key of x. Cut tree rooted at x, meld into root list, and unmark. If parent p of x is unmarked (hasn't yet lost a child), mark it; Otherwise, cut p, meld into root list, and unmark (and do so recursively for all ancestors that lose a second child). min x 15 5 7 18 38 72 24 24 17 23 21 39 41 p 26 30 52 88 decrease-key of x from 35 to 5

32 Fibonacci Heaps: Decrease Key
Case 2b. [heap order violated] Decrease key of x. Cut tree rooted at x, meld into root list, and unmark. If parent p of x is unmarked (hasn't yet lost a child), mark it; Otherwise, cut p, meld into root list, and unmark (and do so recursively for all ancestors that lose a second child). min x 15 5 7 18 38 72 24 24 17 23 21 39 41 second child cut p 26 30 52 88 decrease-key of x from 35 to 5

33 Fibonacci Heaps: Decrease Key
Case 2b. [heap order violated] Decrease key of x. Cut tree rooted at x, meld into root list, and unmark. If parent p of x is unmarked (hasn't yet lost a child), mark it; Otherwise, cut p, meld into root list, and unmark (and do so recursively for all ancestors that lose a second child). min x p 15 5 26 7 18 38 72 88 24 24 17 23 21 39 41 30 52 decrease-key of x from 35 to 5

34 Fibonacci Heaps: Decrease Key
Case 2b. [heap order violated] Decrease key of x. Cut tree rooted at x, meld into root list, and unmark. If parent p of x is unmarked (hasn't yet lost a child), mark it; Otherwise, cut p, meld into root list, and unmark (and do so recursively for all ancestors that lose a second child). min x p 15 5 26 7 18 38 72 88 p' 24 24 17 23 21 39 41 30 52 second child cut decrease-key of x from 35 to 5

35 Fibonacci Heaps: Decrease Key
Case 2b. [heap order violated] Decrease key of x. Cut tree rooted at x, meld into root list, and unmark. If parent p of x is unmarked (hasn't yet lost a child), mark it; Otherwise, cut p, meld into root list, and unmark (and do so recursively for all ancestors that lose a second child). min x p p' p'' 15 5 26 24 7 18 38 72 88 don't mark parent if it's a root 17 23 21 39 41 Note: when a root is linked into another root (in delete-min consolidation phase), we unmark it Q. How can a root node ever be marked? A. In delete-min we delete a root node, but promote all of its (potentially) marked children to be roots. 30 52 decrease-key of x from 35 to 5

36 ערמות פיבונצ'י כמו שראיתם בכיתה: Rank(H)<logФ(n)

37 תרגיל 1 – ערמות פיבונאצ'י האם ניתן לבנות ערמת פיבונאצ'י ובה עץ אחד מעומק n? פתרון נניח שאנו יודעים לפתור עבור n=k נפתור עבור n=k+1 נגדיר x’,y’,z’ כך ש- נכניס אותם לתוך הערמה נפעיל extract-min 5 7 9 20 25 30 35

38 תרגיל 1 – ערמות פיבונאצ'י האם ניתן לבנות ערמת פיבונאצ'י ובה עץ אחד מעומק n? פתרון נניח שאנו יודעים לפתור עבור n=k נפתור עבור n=k+1 נגדיר x’,y’,z’ כך ש- נכניס אותם לתוך הערמה נפעיל extract-min 7 20 9 25 30 35

39 תרגיל 1 – ערמות פיבונאצ'י האם ניתן לבנות ערמת פיבונאצ'י ובה עץ אחד מעומק n? פתרון נניח שאנו יודעים לפתור עבור n=k נפתור עבור n=k+1 נגדיר x’,y’,z’ כך ש- נכניס אותם לתוך הערמה נפעיל extract-min נמחק את x’ (9) 7 20 9 25 30 35

40 תרגיל 2 בערמות פיבונצ'י, אנחנו מבצעים cascading cuts בצומת v אם הוא איבד צומת בן מאז הפעם האחרונה שהוא נתלה על צומת אחרת. נניח שנבצע CC רק אם v איבד שני בנים מאז, כיצד משתנה הלמה: x צומת בערמת פיב', y1,…,yn בנים של x, מסודרים לפי הסדר בו נתלו על x (הכי ישן ועד הכי חדש). אזי rank(yi)≥i-2 לכל i.

41 תרגיל 2 Answer rank(yi)≥i-3
Since yi had the same rank as x when it became a child of x x must have had at least i-1 children at that time, so yi had at least i-1 rank. It could have lost at most two children since then, therefore rank at least i-3

42 הסוף


Download ppt "ערמות בינומיות ופיבונצ'י"

Similar presentations


Ads by Google