slide1 n.
Download
Skip this Video
Download Presentation
תור עדיפויות/ערימה Heap

Loading in 2 Seconds...

play fullscreen
1 / 17

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


  • 235 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


Download Now 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
slide1

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

  • תור עדיפויות הוא מבנה נתונים המוגדר ע"י הפעולות הבאות:
  • צור ערימה ריקה MakeHeap(Q) -
  • הכנס רשומה x לערימה - Insert(x,Q)
  • הדפס את הרשומה עם המפתח הגדול ביותר - Max(Q)
  • הוצא את הרשומה עם המפתח הגדול ביותר - DeleteMax(Q)
slide2

מימוש 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

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

slide3

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

16

11

12

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

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

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

9

7

10

3

2

8

1

4

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

MakeHeap(Q)

O(1)

Max(Q)

O(1)

slide4

Insert(x,Q)

16

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

11

12

9

7

10

3

Insert(13,Q)

2

8

1

slide5

Insert(x,Q)

16

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

11

12

9

7

10

3

Insert(13,Q)

2

8

1

13

slide6

Insert(x,Q)

16

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

11

12

9

13

10

3

Insert(13,Q)

2

8

1

7

slide7

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))

slide8

DeleteMax(Q)

16

5

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

13

12

9

11

10

3

2

8

1

7

5

5

slide9

DeleteMax(Q)

5

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

13

12

9

11

10

3

2

8

1

7

slide10

DeleteMax(Q)

13

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

5

12

9

11

10

3

2

8

1

7

slide11

DeleteMax(Q)

13

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

11

12

9

5

10

3

2

8

1

7

slide12

DeleteMax(Q)

13

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

11

12

9

7

10

3

2

8

1

5

5

סבוכיות זמן

O(log(n))

slide13

סיבוכיות מימוש 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

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

slide14

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

slide15

מימוש 3: מערך

MakeHeap(Q)

O(1)

Insert(x,Q)

O(log(n))

Max(Q)

O(1)

DeleteMax(Q)

O(log(n))

O(1)

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

slide16

תכונות מימוש 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

slide17

פרוצדורה 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