17
ללללל5 11/4/2007 30/5/2007 תתתתת לללל לללללל07b ללללל ללללל

מבני נתונים 07b

Embed Size (px)

DESCRIPTION

מבני נתונים 07b. תרגול 5 11/4/2007 30/5/2007 ערמות. ליאור שפירא. תזכורת: Heaps. עץ בינארי מלא החוק הבסיסי אם צומת B צאצא של צומת A אזי Key(A)≤Key(B) הפעולות הנתמכות Find-min Delete-min Decrease-key Insert Merge. תזכורת: Heaps. הוספת צומת (עבור max-heap ). 15. מחיקת השורש. - PowerPoint PPT Presentation

Citation preview

Page 1: מבני נתונים  07b

5תרגול 11/4/2007 30/5/2007

ערמות

07bמבני נתונים

ליאור שפירא

Page 2: מבני נתונים  07b

Heapsתזכורת: עץ בינארי מלאהחוק הבסיסי

אם צומתB צאצא של צומת A אזי Key(A)≤Key(B) הפעולות הנתמכות

Find-minDelete-minDecrease-keyInsertMerge

Page 3: מבני נתונים  07b

Heapsתזכורת:

מחיקת השורש

(max-heapהוספת צומת )עבור

15

4

15

Page 4: מבני נתונים  07b

1תרגיל בהינתן מערך באורךn נרצה ליצור ,heap ע"י הכנסה

סדרתית של ערכי המערך. הראו סדרת הפעולות (worst case במקרה הכי גרוע )Ω(nlogn)לוקחת

פתרון נצטרך להראות דוגמה של סדרת ההכנסות שלוקחת

Ω(nlogn)פעולות -נחפש סדרה ש"תקשה" כמה שיותר על הheap

Page 5: מבני נתונים  07b

1תרגיל

n n-1 n-2 n-3 … 2 1

n n

n-1

n-1

n

n-1

n n-2

n-2

n n-1

Page 6: מבני נתונים  07b

1תרגיל כל ערך שנוסיף צריך לבעבע לראש העץn/2 ההכנסות האחרונות לוקחות לפחות log(n/2)

כל אחת

:מסקנהW.C = Ω(nlogn)

1log( ) (log log 2)2 2 21 1log log 2

2 2( log )

n nn n

n n n nn

Page 7: מבני נתונים  07b

2תרגיל בהינתןheap שתומך בפעולות extract-min

, הראו שניתן למיין f(n) amortized בזמן insertו-O(nf(n)) בזמן nמערך מגודל

פתרון נבצעn פעולות הכנסה בזמן O(nf(n)) מבצעn פעולות הוצאת מינימום בזמן O(nf(n)) סה"כO(nf(n))

אלגוריתם מיון זה נקראheap-sort בשיעור תלמדו כי מיון כל איבר הואΩ(logn)

Page 8: מבני נתונים  07b

Median Heap – 3תרגיל ממשו מבנה נתונים התומך בפעולות

insert בזמן O(logn)extract-median בזמן O(logn)find-median בזמן O(1)

2 4 5 7 8 12 14 15 20

Page 9: מבני נתונים  07b

- פתרון3תרגיל Max-heapMin-heap

+

האברים הקטנים)עד החציון(

האברים הגדולים)מהחציון(

Page 10: מבני נתונים  07b

- פתרון3תרגיל

-נשתמש בmax-heap-ו min-heapn/2-הערכים הגדולים ביותר יישמרו ב max-heap-השאר יישמרו בmin-heapהחציון תמיד נמצא בשורש של אחד מהם

Max-heapMin-heap

+

2 4 5 7 8 12 14 15 20 Min-HeapMax-Heap

Page 11: מבני נתונים  07b

- פתרון3תרגיל Find-median

If (size(minheap)>size(maxheap)) return getmin(minheap)

Else return getmax(maxheap)

Insert(x) If (x<getmin(minheap))

Insert(maxheap,x) Else

Insert(minheap,x) If (abs(size(minheap)-size(maxheap))>1)

Balance heaps (move root from bigger heap to smaller heap)

Extract-Median Extract median from the max-heap or min-heap…

O(1)

O(logn)

O(logn)

Page 12: מבני נתונים  07b

Binomial Heapsתזכורת: תחילה נגדירBinomial Tree:

מכיל צומת יחידה0עץ בינומי מדרגה עץ בינומי מדרגהkהוא

בעל שורש מדרגהk ילדיו הינם עצים בינומיים מדרגותk-1,k-2,…,0)בסדר זה( עץ בינומי מדרגהk 2 מכילk צמתים והינו בגובה k

Page 13: מבני נתונים  07b

Binomial Heapsתזכורת: איחוד שני עצים בינומיים מסדרk-1

ניצור עץ בינומי מסדרk ע"י תליית אחד העצים כבן השמאלי ביותר של העץ השני

Page 14: מבני נתונים  07b

Binomial Heapsתזכורת: הגדרתBinomial Heap

סט עצים בינומיים המקיימים את התכונות הבאות כל עץ מקיים את תכונתminimum-heap כל צאצא גדול(

מההורה שלו( עבור כל סדרk עצים כאלו ב-1 או 0 של עץ בינומי, יש heap

Page 15: מבני נתונים  07b

Binomial Heapsתזכורת: פעולתMerge של שני עצים מדרגה k

function mergeTree(p, q) if p.root <= q.root

return p.addSubTree(q) else

return q.addSubTree(p) end

Page 16: מבני נתונים  07b

Binomial Heapsתזכורת: פעולתmerge של שני Binomial Heaps

function merge(p, q)

while not( p.end() and q.end() )

tree = mergeTree(p.currentTree(), q.currentTree())

if not heap.currentTree().empty()

tree = mergeTree(tree, heap.currentTree())

heap.addTree(tree)

else

heap.addTree(tree)

end if

heap.next() p.next() q.next()

end while

end

Page 17: מבני נתונים  07b

Binomial Heapsתזכורת: פעולתInsert

ניצורheap חדש המכיל את האבר החדש, ונבצע merge-בין שני ה heaps פעולתminimum

עלינו לחפש את הערך המינימלי מבין שורשי העצים בheap פעולתdelete-min

מצא את האבר ומחק אותו-הפוך את בניו לbinomial heap-ומזג את שני ה heaps

פעולתDecrease-min-בדומה לפעולות בheapרגיל

פעולתDeleteובצע -∞שנה את הערך ל delete-min

Binomial Heap הדגמה של

http://www.cse.yorku.ca/~aaw/Sotirios/BinomialHeap.html