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

48
תתתת תתתתתת, תתתתתת תתתתת2008 - ת תתת"ת- ת1 תתתתת תתתתת: תתתתתת – ת'

Upload: courtney-mclean

Post on 01-Jan-2016

45 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

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

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

1

שיעור עשירי:

מיונים – ב'

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

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

2

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

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

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

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

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

3

תור עדיפויות

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

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

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

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

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

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

4

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

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

תהליכים

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

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

5

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

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

100 20 20

first

5

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

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

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

6

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

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

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

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

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

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

7

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

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

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

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

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

1

2

5

6 9

8

3

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

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

8

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

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

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

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

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

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

9

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

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

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

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

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

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

10

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

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

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

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

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

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

11

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

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

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

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

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

)O)1ב-

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

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

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

12

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

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

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

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

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

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

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

13

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

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

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

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

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

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

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 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

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

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

15

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

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

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

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

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

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

16

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

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

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

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

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

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

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 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

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

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

18

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

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

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

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

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

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

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

19

סיכום ביניים

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

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

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

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

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

20

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

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

n = arr.length

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

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

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

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

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

21

גובה של ערימה

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

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

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

22

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

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

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

לאפס sizeאתחול •

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

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

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

23

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

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

]arr]1החזרת •

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

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

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

24

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

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

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

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

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

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

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

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 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(

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

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 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אם

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

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 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)

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

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

28

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

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

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

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

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

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

29

16

78

14

9 3

10

142

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

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

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

30

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

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

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

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

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

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

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

31

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

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

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

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

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

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

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

32

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

buildHeap (arr)

heapSize]arr[ length]arr[

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

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

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

33

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

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

12/ hn

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

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

34

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

22/1

1

2

)()22

(

2/)(

0

log

0

0

1

hh

n

hh

Logn

h

h

hbecause

nOhn

O

nhO

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

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

35

: מסקנה

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

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

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

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

36

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

buildHeap (arr)

heapSize]arr[ length]arr[

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

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

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

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

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

37

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

extractMax (arr)

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

heapSize]arr[ heapSize]arr[-1;

heapIfY )arr,1(

return max

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

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

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

38

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

:)extractMax)Hנבצע •

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

91

76

61

18 57

72

65 43 10 15 29

3720

86

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

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

39

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

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

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

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

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

(size)

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

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 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

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

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

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 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הכנסת הערך

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

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

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

42

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

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

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

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

61

18 57

72

65 43 30 95

3720

86

91

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

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

43

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

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

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

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

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

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

44

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

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

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

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

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

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

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

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

:2בגודל

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

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

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 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(

}

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

מבנה נתונים, המכללה לבנות י-ם תשס"ח - 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

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

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

47

heap sortזמן הריצה:

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

נסביר:

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

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

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

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

48

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

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

כערימה.

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

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