שיעור עשירי: מיונים – ב
DESCRIPTION
שיעור עשירי: מיונים – ב'. מקורות נוספים: מבוא לאלגוריתמים פרק 7. תודות לד"ר ראובן חוטובלי שחומרי ההוראה שלו סייעו בהכנת המצגת. תור עדיפויות. תור* עדיפויות ( priority queue ) הוא טיפוס אוסף * המטפל בנתונים בהתאם לעדיפויות שלהם: לכל איבר מוגדרת עדיפות מסויימת - PowerPoint PPT PresentationTRANSCRIPT
מבנה נתונים, המכללה לבנות י-ם תשס"ח - 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יהיה ביעילות •יתבצע במקום )כמו מיון הכנסה ובחירה(•
מאחד את היתרונות במיונים השונים•היתרונות נצברים מאופן השימוש במבנה הנתונים מערך •
כערימה.
למרות האלגוריתם הטוב, מימוש טוב של מיון מהיר יהיה •מהיר ממנו ביישומים מעשיים!
הערימה כמבנה נתונים משמשת ליישומים נוספים •)תור קדימויות ראינו(