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
‫הסוף‬