תור עדיפויות/ערימה
Download
1 / 17

תור עדיפויות/ערימה Heap - PowerPoint PPT Presentation


  • 229 Views
  • Uploaded on

תור עדיפויות/ערימה Heap. תור עדיפויות הוא מבנה נתונים המוגדר ע"י הפעולות הבאות: צור ערימה ריקה MakeHeap( Q ) - הכנס רשומה x לערימה - Insert( x , Q ) הדפס את הרשומה עם המפתח הגדול ביותר - Max( Q ) הוצא את הרשומה עם המפתח הגדול ביותר - DeleteMax( Q ). מימוש 1. עץ חיפוש מאוזן.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' תור עדיפויות/ערימה Heap ' - edric


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

תור עדיפויות/ערימהHeap

  • תור עדיפויות הוא מבנה נתונים המוגדר ע"י הפעולות הבאות:

  • צור ערימה ריקה MakeHeap(Q) -

  • הכנס רשומה x לערימה - Insert(x,Q)

  • הדפס את הרשומה עם המפתח הגדול ביותר - Max(Q)

  • הוצא את הרשומה עם המפתח הגדול ביותר - DeleteMax(Q)


מימוש 1

עץ חיפוש מאוזן.

MakeHeap(Q)

O(1)

Insert(x,Q)

O(log(n))

Max(Q)

O(1)

DeleteMax(Q)

O(log(n))

key

info

parent

O(n)

סיבוכיות מקום נוסף

left

right

האם אפשר לממש בעזרת מבנה יותר פשוט?


מימוש 2: ערימה בעזרת עץ בינרי כמעט שלם

16

11

12

המפתח של הוֹרֶה גדול או שווה

ממפתחות ילדיו

(תנאי זה נקרא תכונת הערימה).

9

7

10

3

2

8

1

4

איפו נמצא האבר המקסימלי?

MakeHeap(Q)

O(1)

Max(Q)

O(1)


Insert( שלםx,Q)

16

נשתמש בפרוצדורה sift-up

11

12

9

7

10

3

Insert(13,Q)

2

8

1


Insert( שלםx,Q)

16

נשתמש בפרוצדורה sift-up

11

12

9

7

10

3

Insert(13,Q)

2

8

1

13


Insert( שלםx,Q)

16

נשתמש בפרוצדורה sift-up

11

12

9

13

10

3

Insert(13,Q)

2

8

1

7


Insert( שלםx,Q)

16

נשתמש בפרוצדורה sift-up

13

13

12

9

11

10

3

Insert(13,Q)

Insert(5,Q)

2

8

1

7

5

5

סבוכיות זמן

O(log(n))


DeleteMax( שלםQ)

16

5

נשתמש בפרוצדורה sift-down

13

12

9

11

10

3

2

8

1

7

5

5


DeleteMax( שלםQ)

5

נשתמש בפרוצדורה sift-down

13

12

9

11

10

3

2

8

1

7


DeleteMax( שלםQ)

13

נשתמש בפרוצדורה sift-down

5

12

9

11

10

3

2

8

1

7


DeleteMax( שלםQ)

13

נשתמש בפרוצדורה sift-down

11

12

9

5

10

3

2

8

1

7


DeleteMax( שלםQ)

13

נשתמש בפרוצדורה sift-down

11

12

9

7

10

3

2

8

1

5

5

סבוכיות זמן

O(log(n))


סיבוכיות מימוש 2: ערימה בעזרת עץ בינרי כמעט שלם

MakeHeap(Q)

O(1)

Insert(x,Q)

O(log(n))

Max(Q)

O(1)

DeleteMax(Q)

O(log(n))

key

parent

O(n)

סיבוכיות מקום נוסף

left

right

האם אפשר לממש בעזרת מבנה עוד יותר פשוט?


1 בינרי כמעט שלם

16

מימוש 3: מערך

2

3

13

13

12

4

5

6

7

9

11

10

3

8

9

10

11

12

2

8

1

7

5

5

16

13

12

9

11

10

3

2

8

1

7

5

1

2

3

4

5

6

7

8

9

10

11

12

ההורה של צומת i הוא הצומת i/2,

בן שמאלי של צומת i הוא הצומת 2i

בן ימני של צומת i הוא הצומת 2i+1


מימוש 3: מערך בינרי כמעט שלם

MakeHeap(Q)

O(1)

Insert(x,Q)

O(log(n))

Max(Q)

O(1)

DeleteMax(Q)

O(log(n))

O(1)

סיבוכיות מקום נוסף


תכונות מימוש 3: מערך בינרי כמעט שלם

16

13

12

9

11

10

3

2

8

1

7

5

n =12

1

2

3

4

5

6

7

8

9

10

11

12

1

16

r

13

2

3

2r+1

2r

13

13

12

4

5

6

7

9

11

10

3

הלא-עלה האחרון n/2

8

9

10

11

12

העלה הראשון n/2+1

2

8

1

7

5

5


פרוצדורה בינרי כמעט שלםsift-down

sift_down

{

int r;

for (r = 1; r <= n/2; ){ /* n/2 is the last non-leaf */

if (2r = = 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;

{ { }

r

13

2r

2r+1


ad