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

Post on 03-Jan-2016

62 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

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

TRANSCRIPT

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

ערמות

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

ליאור שפירא

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

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

Find-minDelete-minDecrease-keyInsertMerge

Heapsתזכורת:

מחיקת השורש

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

15

4

15

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

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

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

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

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

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

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)

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

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

2 4 5 7 8 12 14 15 20

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

+

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

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

- פתרון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

- פתרון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)

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

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

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

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

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

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

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

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

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

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

return p.addSubTree(q) else

return q.addSubTree(p) end

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

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

top related