שיעור עשירי: מיונים – ב

Post on 01-Jan-2016

45 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

שיעור עשירי: מיונים – ב'. מקורות נוספים: מבוא לאלגוריתמים פרק 7. תודות לד"ר ראובן חוטובלי שחומרי ההוראה שלו סייעו בהכנת המצגת. תור עדיפויות. תור* עדיפויות ( priority queue ) הוא טיפוס אוסף * המטפל בנתונים בהתאם לעדיפויות שלהם: לכל איבר מוגדרת עדיפות מסויימת - PowerPoint PPT Presentation

TRANSCRIPT

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

1

שיעור עשירי:

מיונים – ב'

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

2

מקורות נוספים:

מבוא לאלגוריתמים 7פרק

תודות לד"ר ראובן חוטובלישחומרי ההוראה שלו סייעו בהכנת המצגת

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

3

תור עדיפויות

*( הוא טיפוס אוסףpriority queue) תור* עדיפויות•המטפל בנתונים בהתאם לעדיפויות שלהם:

לכל איבר מוגדרת עדיפות מסויימת–סדר הכנסת האיברים הינו שרירותי–הטיפול נעשה לפי סדר העדיפויות: האיבר –

הראשון לטיפול הינו בעל העדיפות הגבוהה ביותרתור כאן - לא במשמעות של טיפוס הנתונים המופשט "תור"! *•

טיפוס נתונים מופשט*•

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

4

שימושים בתור עדיפויות

ניהול הדפסות מצטברות שאינן שוות קדימות• במערכות מרובות CPUניהול משאבי זמן •

תהליכים

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

5

ייצוג תור עדיפויות בעזרת רשימה

נחזיק רשימה מקושרת ממוינת בסדר לא •עולה של עדיפויות

100 20 20

first

5

עדיפות מקסימלית

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

6

ייצוג תור עדיפויות בעזרת רשימה

האיבר בעל העדיפות הגבוהה ביותר נמצא•

תמיד בראש הרשימה)O)1 האיבר ה"עדיף" ביותר נעשית ב- מציאת•)O)1 האיבר העדיף היא ב-מחיקת• = מס' O)n(( n נתון חדש לוקחת הכנסת•

מקום להכנסה לפי סדר עדיפויות[לחפש]צריך האיברים באוסף(

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

7

ייצוג תור עדיפויות בעזרת עח"ב

נחזיק עץ חיפוש בינרי הממוין לפי עדיפויות:•

כך האיבר בעדיפות המירבית יהיה

תמיד בצומת הימני ביותר:

עדיפות מקסימלית

1

2

5

6 9

8

3

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

8

ייצוג תור עדיפויות בעזרת עח"ב

, )O)1 האיבר העדיף תיעשה ב-מציאתכדי ש•נחזיק מצביע אליו )אותו יש לעדכן בעת

הכנסות/מחיקות( נתון חדש הכנסת האיבר העדיף ומחיקתפעולות •

)תלוי כזכור במבנה העץ( בממוצע )O)log nלוקחות

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

9

ייצוג תור עדיפויות בעזרת ערימה

)טיפוס(( היא מבנה נתונים heap)ערימה •המאפשר מציאת איבר מקסימלי בין הנמצאים

:)O)1בערימה ביעילות מקסימלית

עדיפות מקסימלית

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

10

ייצוג תור עדיפויות בעזרת ערימה

האיבר העדיף מחיקת

נתון חדש הכנסתו

במקרה הגרוע )O)log nייקחו:

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

11

ממשק טיפוס הנתונים ערימה

•Heap)( הפעולה בונה ערימה ריקה – (init)•insert )x( הפעולה מכניסה ערך – x-לערימה ב O)log n(

•extractMax)( – הפעולה מוציאה את האיבר המקסימלי

מהערימה ומחזירה אותו )O)log nב-

•retrieve)( או( findMax)( הפעולה מחזירה את הערך - ) המקסימלי בערימה מבלי למוחקו

)O)1ב-

•buildHeap )values( הפעולה בונה ערימה עם הערכים – )O)n הנתונים ב-

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

12

עקרונות מימוש הערימה

הערימה היא עץ בעל צורה מסוימת•מטרות הערימה:•

יעילות )בדומה לעץ חיפוש בינרי(–פשטות המימוש )יותר פשוט מעץ חיפוש בינרי(–

נשיג ע"י סידור צומתי העץ בצורה יעילותאת ה•"סדר הערימהמסוימת – נקרא לזה "

כמעט עץכ נשיג ע"י מימוש העץ פשטותאת ה•מערך בתוך מלא

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

13

עץ בינרי מלא וכמעט מלא

עץ בינרי כמעט מלא

בו ברמה הוא עץ בינרי

של העלים, חסרים )אולי(

כמה עלים ימניים ביותר:

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

14

מימוש עץ בינרי כמעט מלא במערך

אפשרי כאשר ידוע • על nחסם עליון

מספר הצמתים בעץ

0123456789101112131415

A

1

a

d

b

e f

c

g

i j k l m n oh

4

2

5 6

3

7

9 10 11 12 13 14 158

dba e fc g i j k l m n oh

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

15

מבנה הנתונים - ערימה )בינרית(

מערך המייצג עץ בינרי כמעט מלא •לכל צומת בעץ – מתאים תא במערך•למערך יש שתי תכונות:•

. אורך המערך 1. מספר האיברים המשמעותי 2

(size < length) המאוחסן במערך

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

16

מבנה הנתונים - ערימה )בינרית(

קיים קשר ברור בין צומתי העץ והאינדקסים של •המערך:

(]0[arr)לא משתמשים ב ]arr]1שורש העץ יושב לעולם ב-

)ערך שלם במערך i/2 מאוחסן בתא iהורה של צומת תחתון(

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

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

17

ייצוג הערימה 1 2 3 4 5 6 7 8 9 10

16 14 10 8 7 9 3 2 4 1

5

16

478

14

9 3

103

2

1

1421098

76

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

18

תכונת הערימה )בינרית( נקבע בעזרת:)קובע את היעילות( סדר הערימה

תכונת הערימה:•, פרט לשורש, מתקיים:iלכל צומת

ערך כל צומת קטן-שווה מהערך השמור בהורה של הצומת

: ערך צומת הוא לכל היותר ערך ההורה במילים אחרות. שלו

שאלות הבהרה:היכן נמצא הערך הגדול ביותר בערימה? •ערך שצומת מכיל, גדול או שווה לכל הערכים ....? •

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

19

סיכום ביניים

של הערימה נמצא בשורש המקסימליהאיבר •.1כלומר בתא מספר

מהרקורסיביות של הגדרת הערימה נובע כי •לכל צומת, תתי העץ של הצומת הם ערימות.

העלים של העץ הם איברי החלק השני )הימני( •של המערך.

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

20

כמה עלים בערימה? :1טענה •

, כלומר:arr אורכו של מערך nיהי

n = arr.length

]arr])n/2+1( …nהאיברים בתת מערך

המייצג ערימה בינרית, הם כולם עלים.

: מחצית מאיברי הערימה הם עלים.מסקנה

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

21

גובה של ערימה

: גובה של עץ ערימה בינרית 2טענה • צמתים, הואnבעל nlog

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

22

מימוש פעולות הממשק של ערימה

הפעולה הבונה: חסם עליון של מספר n+1 (nהקצאת מערך בגודל

האיברים בערימה(

לאפס sizeאתחול •

)O)1יעילות הפעולה בייצוג הנתון:

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

23

מימוש פעולות הממשק של ערימה

– מחזירה את האיבר extractMaxהפעולה הגדול:

]arr]1החזרת •

)O)1יעילות הפעולה בייצוג הנתון:

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

24

שמירה על מבנה הערימההדבר המשמעותי ביותר הוא השמירה על מבנה

הערימה, כלומר על תכונת הערימה)…(heapIfYהפעולה תקרא: •

הפעולה תקבל מערך ואינדקס הקלט:העצים הבינריים שהם הילד הימני והשמאלי של ההנחה:

עצמו -]arr]i שייתכן, הם ערימות אך iהאינדקס מפר את הסדר ויש לשבצו למקומו.

הפעולה תחליק את האיבר למקומו בערימה, המהלך: יהפוך לערימת מקסימום.]arr]iכך שהעץ ששורשו ב-

מערך המייצג ערימת מקסימום. הפלט:

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

25

אלגוריתם לשמירה על מבנה הערימהheapIfY (arr, i)

step1+2. l Left)i( r Right)i(

Step3 if l arr.heapSize and arr]l[ > arr]i[

then largest l

else largest i

step4 if r arr.heapSize and arr]r[ > arr]largest[

then largest r

step5 if )largest != i( {exchange arr]i[ arr] largest[}

heapIfY)arr, largest(

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

26

אלגוריתם לשמירה על מבנה הערימה מתקיים:4צעד אחרי •

• largest = l if arr]l[ > max )arr]r[,arr]i[( r if arr]r[ > max )arr]l[,arr]i[(

• i if A]i[ > max )arr]l[,arr]r[(

בכל שלב נקבע האיבר הגדול ביותר • והאינדקס שלו ]arr]right)i([,arr]left)i([,arr]iמבין

.largestמוצב ב- אז סיימנו!largest=iאם

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

27

heapIfYדוגמה לפעולה

5

16

47

14

4

9 3

10

32

1

182

1098

76

16

74

14

9 3

10

182

heapIfY(arr,2)

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

28

שמירה על מבנה הערימה i בצומת המושרש הוא הגדול ביותר אזי תת-העץ ]arr]i אם•

הוא ערימה והשיגרה מסתיימת. אחד משני בניו מכיל את האיבר הגדול ביותר. לכן אחרת:•

arr]largest[ -ו arr]i[ .מוחלפים זה בזה ובניו מקיימים את תכונת הערימה.iלאחר ההחלפה הצומת • ]arr]i מכיל עתה את הערך המקורי largestאולם הצומת•

מפר את תכונת הערימה.largest ב-המושרששתת העץ יתכן ו עם תת עץ זה.heapIfYלכן יש לקרוא באופן רקורסיבי ל- •

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

29

16

78

14

9 3

10

142

heapIfYהמשך הדוגמה:

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

30

heapIfYיעילות הפעולה הפעולה מבצעת סדרת החלפות על מסלול כלשהו

משורש העץ לעלה. על כל החלפה מתבצע מספר קבוע של פעולות •

(.swap)שתי השוואות ו-לכן, מספר הפעולות במקרה הגרוע הוא כגובה •

העץ., אזי סדר log nמכיוון שגובה העץ חסום על ידי •

הגודל של זמן הריצה של הפעולה כולה הוא O)log n( .

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

31

buildHeapבניית ערימה – הפעולה ]n = length]arr כאשר arr מערך קלט:ה ערימה הפלט:•

]arr])n/2+1( …nמכיוון שהאיברים במערך של העץ, הרי שבתחילת התהליך כל אחד עליםכולם

מהם הוא ערימה בת איבר יחיד. אם כך נוכל להפוך את המערך הנתון לערימה תוך

שימוש )מהסוף על התאים שבתחילת המערך heapIfYב-

להתחלה(באופן הזה:

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

32

buildHeapבניית ערימה – הפעולה

buildHeap (arr)

heapSize]arr[ length]arr[

for i length]arr[/2 downto 1 do heapIfY )arr, i(

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

33

על צומת HeapIfYהזמן הנדרש להרצת •,)O)h הוא hשגובהו

בגובה זה ישנם צמתים •לכל היותר.

12/ hn

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

34

buildHeapלכן זמן הריצה הכולל של •הוא:

22/1

1

2

)()22

(

2/)(

0

log

0

0

1

hh

n

hh

Logn

h

h

hbecause

nOhn

O

nhO

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

35

: מסקנה

הזמן הדרוש לבניית ערימה הוא לינארי

)O)nבמספר הצמתים בה:

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

36

buildHeapבניית ערימה – הפעולה

buildHeap (arr)

heapSize]arr[ length]arr[

for i length]arr[/2 downto 1 do heapIfY )arr, i(

משך זמן הריצה הוא ...

ניתן לבנות ערימה ממערך לא ממוין בזמן לינארי!

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

37

הוצאת מקסימום מערימהextractMax הפעולה

extractMax (arr)

max arr]1[; arr]1[ arr]heapSize]arr[[;

heapSize]arr[ heapSize]arr[-1;

heapIfY )arr,1(

return max

משך זמן הריצה הוא ...

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

38

extractMaxהדגמה: הפעולה

:)extractMax)Hנבצע •

extractMaxעוד פעם •)H(:

91

76

61

18 57

72

65 43 10 15 29

3720

86

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

39

הכנסת איבר לערימהinsert הפעולה

)איך זה יראה בעץ בינרי?( למערךכעלה אחרון xהכנס את 1.

-sift)הפעולה נקראת גדול מאביו, החלף ביניהם xכל עוד 2.up )

, כי גובה העץ )O)log nמשך זמן הריצה של הפעולה log nהוא

O)logיותר מדויק להגיד, שזמן הריצה הוא מסדר גודל n( , נמצאים במבנה שבפועל הוא מספר האיברים nכאשר

(size)

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

40

הכנסת איבר לערימהinsert הפעולה

insert (arr, key)

heapSize]arr[ heapSize]arr[+1

i heapSize]arr[

while i>1 and arr]parent)i([ < key do{

arr]i[ arr]parent)i([ i parent)i(

}

arr]i[ key

בין הערכים במערך אלא רק הזזה החלפהשימו לב שאין ...של הקטן למקומו

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

41

insert הדגמה: הפעולה3978

1014

16

2 14

3978

1014

16

2 14 15

39158

1014

16

2 14 7

39148

1015

16

2 14 7

15הכנסת הערך

נעקוב בעזרת המערך המתאים:

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

42

insert הדגמה: הפעולה

:)insert)H, 43נבצע •

:)insert)H, 30נבצע •

insert)H, 95(:76נבצע •

61

18 57

72

65 43 30 95

3720

86

91

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

43

ערימת מקסימום וערימת מינימום

וערימת מקסימוםמבדילים בין ערימת • מינימום

בערימת מינימום, כל הורה בעץ קטן משני •ילדיו או שווה להם.

בערימת מקסימום, כל הורה גדול משני •ילדיו או שווה להם.

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

44

heap sort ערימה *מיוןרעיון האלגוריתם הכללי:

, ניתן למיינו באופן הזה:n בגודל arrבהינתן מערך

n = arr.lengthנבנה ערימה ממערך הקלט,

. ]n[arr. ניתן להחליפו עם -]arr]1בתום הבנייה האיבר הגדול נמצא ב

, heapSizeאם מסלקים את הערך הזה מהערימה על ידי הקטנת ניתן

בקלות להפוך את המערך המקוצר לערימה בעזרת זימון אחד של

heapIfY .)רק השורש יכול להיות לא במקום ויש לשמור את תכונת הערימה(

והלאה עד ערימה n-1תהליך זה יחזור על עצמו עבור ערימה בגודל

:2בגודל

בדברנו על מיון אנו מתכוונים למיון בסדר עולה!*

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

45

heap sortמיון ערימה heapSort (arr)

buildHeap)arr(;for i=length]arr[ downto 2

do{

exchange )arr]1[, arr]i[( heapSize]arr[ =heapSize]arr[-1 heapIfY)arr,1(

}

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

46

heap sortמעקב אחר

2174

38

9

9174

38

2

9124

37

8

824

37

1

821

34

7

9 871

34

2

9 871

32

4

9

874

32

1

9 874

12

3

9 874

32

1

9 874

31

2

9

874

32

1

9 874

32

1

9

1,2,3,4,7,8,9

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

47

heap sortזמן הריצה:

במקרה )O)n log nזמן הריצה של מיון ערימה הוא הגרוע.

נסביר:

)O)n הוא buildHeapזמן הריצה של

)O)log n הוא heapIfYזמן הריצה של כל זימון בודד של

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 2008

48

מיון ערימה )טוב כמו מיון מיזוג()O)n log nיהיה ביעילות •יתבצע במקום )כמו מיון הכנסה ובחירה(•

מאחד את היתרונות במיונים השונים•היתרונות נצברים מאופן השימוש במבנה הנתונים מערך •

כערימה.

למרות האלגוריתם הטוב, מימוש טוב של מיון מהיר יהיה •מהיר ממנו ביישומים מעשיים!

הערימה כמבנה נתונים משמשת ליישומים נוספים •)תור קדימויות ראינו(

top related