Insertx Q 16 siftup 11 9 2 12

  • Slides: 17
Download presentation

Insert(x, Q) 16 sift-up נשתמש בפרוצדורה 11 9 2 12 7 8 1 10

Insert(x, Q) 16 sift-up נשתמש בפרוצדורה 11 9 2 12 7 8 1 10 3 Insert(13, Q)

Insert(x, Q) 16 sift-up נשתמש בפרוצדורה 11 9 2 12 7 8 1 13

Insert(x, Q) 16 sift-up נשתמש בפרוצדורה 11 9 2 12 7 8 1 13 10 3 Insert(13, Q)

Insert(x, Q) 16 sift-up נשתמש בפרוצדורה 11 9 2 12 13 8 1 10

Insert(x, Q) 16 sift-up נשתמש בפרוצדורה 11 9 2 12 13 8 1 10 7 3 Insert(13, Q)

Insert(x, Q) 16 sift-up נשתמש בפרוצדורה 13 9 2 12 11 8 1 10

Insert(x, Q) 16 sift-up נשתמש בפרוצדורה 13 9 2 12 11 8 1 10 7 5 3 Insert(13, Q) Insert(5, Q) סבוכיות זמן O(log(n))

Delete. Max(Q) 16 5 sift-down נשתמש בפרוצדורה 13 9 2 12 11 8 1

Delete. Max(Q) 16 5 sift-down נשתמש בפרוצדורה 13 9 2 12 11 8 1 10 7 5 3

Delete. Max(Q) 5 sift-down נשתמש בפרוצדורה 13 9 2 12 11 8 1 10

Delete. Max(Q) 5 sift-down נשתמש בפרוצדורה 13 9 2 12 11 8 1 10 7 3

Delete. Max(Q) 13 sift-down נשתמש בפרוצדורה 5 12 9 2 11 8 1 10

Delete. Max(Q) 13 sift-down נשתמש בפרוצדורה 5 12 9 2 11 8 1 10 7 3

Delete. Max(Q) 13 sift-down נשתמש בפרוצדורה 11 9 2 12 5 8 1 10

Delete. Max(Q) 13 sift-down נשתמש בפרוצדורה 11 9 2 12 5 8 1 10 7 3

 ) Delete. Max(Q 13 נשתמש בפרוצדורה sift-down 12 3 11 10 7 5

) Delete. Max(Q 13 נשתמש בפרוצדורה sift-down 12 3 11 10 7 5 סבוכיות זמן )) O(log(n 9 1 8 2

 מערך : 3 מימוש Make. Heap(Q) Insert(x, Q) O(1) O(log(n)) Max(Q) O(1) Delete.

מערך : 3 מימוש Make. Heap(Q) Insert(x, Q) O(1) O(log(n)) Max(Q) O(1) Delete. Max(Q) O(1) O(log(n)) סיבוכיות מקום נוסף

 תכונות מימוש : 3 מערך n =12 1 5 7 12 10 11

תכונות מימוש : 3 מערך n =12 1 5 7 12 10 11 8 2 3 10 9 8 7 6 9 11 5 2 r+1 4 16 r 13 2 r הלא - עלה האחרון n/2 העלה הראשון n/2 +1 12 7 3 16 13 12 3 1 2 1 3 13 6 10 2 4 9 5 11 9 10 11 12 5 7 1 8 8 2

sift-down פרוצדורה sift_down r 13 { int r; for (r = 1; r <=

sift-down פרוצדורה sift_down r 13 { int r; for (r = 1; r <= n/2; ){ /* n/2 is the last non-leaf */ 2 r if (2 r = = n){ /* r has one child at 2*r */ if (a[r] < a[2*r]) swap(r, 2*r); break; } else {/* r has two children at 2*r and 2*r+1 */ if (a[r] < a[2*r] && a[2*r] >= a[2*r+1]){ swap(r, 2*r); r *= 2; } else if (a[r] < a[2*r + 1] && a[2*r + 1] >= a[2*r]){ swap(r, 2*r + 1); r * = 2*r + 1; } else break; } } } 2 r+1