Recitation 3 - Data Structures 07b
Download
Report
Transcript Recitation 3 - Data Structures 07b
מבני נתונים 09a
ערמות;
מבוסס על מצגות של
ליאור שפירא ,חיים קפלן וחברים
Heaps :תזכורת
עץ בינארי מלא
החוק הבסיסי
Key(A)≤Key(B) אזיA צאצא של צומתB אם צומת
הפעולות הנתמכות
Find-min
Delete-min
Decrease-key
Insert
Merge
תזכורתHeaps :
הוספת צומת (עבור )max-heap
15
מחיקת השורש
15
4
תרגיל 1
בהינתן מערך באורך ,nנרצה ליצור min heapע"י
הכנסה סדרתית של ערכי המערך .הראו סדרת הפעולות
לוקחת ) Ω(nlognבמקרה הכי גרוע ()worst case
פתרון
נצטרך להראות דוגמה של סדרת ההכנסות שלוקחת
) Ω(nlognפעולות
נחפש סדרה ש"תקשה" כמה שיותר על הheap-
1 תרגיל
n
n-1
n
n-2
n-3
n
n-1
n-1
n
n-1
n
2
…
n-2
n-2
n
n-1
…
1
תרגיל 1
כל ערך שנוסיף צריך לבעבע לראש העץ
n/2 ההכנסות האחרונות לוקחות לפחות ) log(n/2כל
אחת
n
n
1
log( ) n(log n log 2)
2
2
2
1
1
)n log n n log 2 (n log n
2
2
מסקנהW.C = Ω(nlogn) :
תרגיל 2
בהינתן heapשתומך בפעולות extract-minו-
insertבזמן ,f(n) amortizedהראו שניתן למיין
מערך מגודל nבזמן ))O(n∙f(n
פתרון
נבצע nפעולות הכנסה בזמן ))O(n∙f(n
מבצע nפעולות הוצאת מינימום בזמן ))O(n∙f(n
סה"כ ))O(n∙f(n
אלגוריתם מיון זה נקרא heap-sort
בשיעור תלמדו כי מיון nאברים הוא )Ω(n∙logn
Median Heap – 3 תרגיל
ממשו מבנה נתונים התומך בפעולות
O(logn) בזמןinsert
O(logn) בזמןextract-median
O(1) בזמןfind-median
2
4
5
7
8
12
14
15
20
תרגיל - 3פתרון
Max-heap
Min-heap
+
האברים הקטנים
(עד החציון)
האברים הגדולים
(מהחציון)
תרגיל - 3פתרון
Max-heap
Min-heap
+
נשתמש ב max-heap-וmin-heap-
n/2הערכים הגדולים ביותר יישמרו בmax-heap-
השאר יישמרו בmin-heap-
החציון תמיד נמצא בשורש של אחד מהם
Min-Heap
20
15
14
12
8
7
5
4
2
Max-Heap
פתרון- 3 תרגיל
Find-median
If (size(minheap)>size(maxheap))
Else
O(1)
return getmax(maxheap)
Insert(x)
If (x<getmin(minheap))
Insert(maxheap,x)
Else
Insert(minheap,x)
Balance heaps (move root from bigger heap to smaller
heap)
Extract-Median
O(logn)
If (abs(size(minheap)-size(maxheap))>1)
return getmin(minheap)
O(logn)
Extract median from the max-heap or min-heap…
שאלה 1
בהכרח :בערימת מקסימום ,החציון נמצא
א .בשורש• .
ב .בעומק לכל היותר • .
ג .בעומק לכל היותר •
ד .בשתי השכבות הנמוכות ביותר• .
ה .אף אחד מהנ"ל• .
תשובה 1
ה .החציון יכול להיות בן ישיר של השורש (למשל
אם כל תת עץ ימין גדולים מכל תת עץ שמאל)
ויכול גם להיות באחד העלים (אם חצי הערכים
הקטנים ביותר נמצאים בעלים) .המקסימום
חייב להימצא בשכבה התחתונה.
שאלה+תשובה 2
האם מערך הממוין בסדר הפוך הוא ערימה? •
תשובה :כן.
האיבר במקום ה i-גדול מהאיבר ה 2i+1-ו( 2i-שהם בניו) לכל .i
שאלה 3
ערימה מכילה N= 2i -1צמתים ,עבור iשלם חיובי כלשהו.
העומק של צומת הינו מספר הקשתות בין השורש ובין הצומת (עומק השורש הינו .)0
הגובה של צומת הינו מספר הקשתות בין הצומת ובין העלה הקרוב ביותר (גובה עלה הינו .)0
יהי Dסכום העומקים של כל הצמתים (כולל עלים ) אזי
אD ( N ) .
בD ( N log N ) .
גD ( N 2 ) .
דD ( N 2 log N ) .
ה .אף אחת מהתשובות הנ"ל אינה נכונה.
*(במקור הופיעה השאלה עם עץ טרינארי מאוזן ).
תשובה 3
ב .חסם עליון:
.לכן הסכום )O(lg nעומק כל הצמתים הוא
O(n lg n).הוא
)Ω(lg nחסם תחתון :עומק כל העלים הוא
) Ω(n lg nעלים לכן הסכום הוא גם )Ω(nויש
שאלה 4
אותם נתונים כמו בשאלה הקודמת.
יהי Hסכום הגבהים של כל הצמתים (כולל עלים) אזי
אH ( N ) .
בH ( N log N ) .
גH ( N 2 ) .
דH ( N 2 log N ) .
ה .אף אחת מהתשובות הנ"ל אינה נכונה.
4 תשובה
• החישוב בדומה לחישוב זמן הריצה של.א
Build-Heap .
O (log n )
h 0
n
h h n
2
h
3
n n
h 0 4
O (log n )
h 0
h
n
h
2
O (log n )
h 0
h
1.5
h
2
הסוף