Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A...
Transcript of Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A...
![Page 1: Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A i)HEAPIFY (A, i) f ←left [i] r ←right (i)right (i) if f ≤heap-size [A] and A [f]](https://reader034.fdocuments.in/reader034/viewer/2022050103/5f41dfd7b0d90769b9681994/html5/thumbnails/1.jpg)
Εφαρμογές σωρούΕφαρμογές σωρού
Max heap: χρονοπρογραμματισμός
Min heap: simulation
Ταξινόμηση με τη βοήθεια σωρού
![Page 2: Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A i)HEAPIFY (A, i) f ←left [i] r ←right (i)right (i) if f ≤heap-size [A] and A [f]](https://reader034.fdocuments.in/reader034/viewer/2022050103/5f41dfd7b0d90769b9681994/html5/thumbnails/2.jpg)
Εφαρμογές σωρούΕφαρμογές σωρού
161
1014 14 1332
314 6
6 75108 394
2 4 798 10
![Page 3: Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A i)HEAPIFY (A, i) f ←left [i] r ←right (i)right (i) if f ≤heap-size [A] and A [f]](https://reader034.fdocuments.in/reader034/viewer/2022050103/5f41dfd7b0d90769b9681994/html5/thumbnails/3.jpg)
Διατήρηση σωρού
MAX HEAPIFY (A i)MAX-HEAPIFY (A, i)f ← left [i]r right (i)r ← right (i)if f ≤ heap-size [A] and A [f] >A [i]
then largest ← fthen largest ← felse largest ← i
if r ≤ heap-size [A] and A [r]>A [largest]if r ≤ heap size [A] and A [r]>A [largest]then largest ← r
if largest ≠ ig ≠then exchange A [i] ↔ A [largest]
MAX-HEAPIFY [A, largest]
![Page 4: Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A i)HEAPIFY (A, i) f ←left [i] r ←right (i)right (i) if f ≤heap-size [A] and A [f]](https://reader034.fdocuments.in/reader034/viewer/2022050103/5f41dfd7b0d90769b9681994/html5/thumbnails/4.jpg)
Διατήρηση σωρού: πολυπλοκότηταΔιατήρηση σωρού: πολυπλοκότητα
1612n/3≤
1014 32
36 75
108 394
T(n) T(2n/3) + Θ(1)≤2 4 7
98 10T(n) T(2n/3) + Θ(1)≤T(n)= Ο(ύψος)=O(log n)
![Page 5: Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A i)HEAPIFY (A, i) f ←left [i] r ←right (i)right (i) if f ≤heap-size [A] and A [f]](https://reader034.fdocuments.in/reader034/viewer/2022050103/5f41dfd7b0d90769b9681994/html5/thumbnails/5.jpg)
Κατασκευή σωρού on - line
Input: τα στοιχεία καταφθάνουν το ένα μετά το άλλο: a[i] 1 ≤ i ≤ nτο άλλο: a[i], 1 ≤ i ≤ n(θεωρούμε ότι τα στοιχεία δεν είναι διαθέσιμα σε ένα πίνακα)σε ένα πίνακα)
Output: Δομή σωρούOutput: Δομή σωρού
Παράδειγμα: Ακολουθία στοιχείωνρ γμ χ
1 2 3 4 . . .
![Page 6: Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A i)HEAPIFY (A, i) f ←left [i] r ←right (i)right (i) if f ≤heap-size [A] and A [f]](https://reader034.fdocuments.in/reader034/viewer/2022050103/5f41dfd7b0d90769b9681994/html5/thumbnails/6.jpg)
Παράδειγμα (κατασκευή σωρού on – line)
1 2 2 3
2 1 1 3 1 22 1 1 3 1 2
3 3 4
1 2 4 2 3 21 2 4 2 3 2
4 1 1
![Page 7: Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A i)HEAPIFY (A, i) f ←left [i] r ←right (i)right (i) if f ≤heap-size [A] and A [f]](https://reader034.fdocuments.in/reader034/viewer/2022050103/5f41dfd7b0d90769b9681994/html5/thumbnails/7.jpg)
Κατασκευή Σωρού / on - line
ConstructHeap;p
nheap := 0;pfor i := 1 to n do
insert(a[i]);end; ****
![Page 8: Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A i)HEAPIFY (A, i) f ←left [i] r ←right (i)right (i) if f ≤heap-size [A] and A [f]](https://reader034.fdocuments.in/reader034/viewer/2022050103/5f41dfd7b0d90769b9681994/html5/thumbnails/8.jpg)
Κατασκευή Σωρού on – line / ΠολυπλοκότηταΚατασκευή Σωρού on line / Πολυπλοκότητα
insert(a[i]) O(log i)insert(a[i]) O(log i)
T(n)= log n + log (n-1) + …+ = log (n!) ( ) g g ( ) g ( )
n! ≤ nn
n! ≥ (n/2)n/2
T(n)=Θ(n log n)
![Page 9: Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A i)HEAPIFY (A, i) f ←left [i] r ←right (i)right (i) if f ≤heap-size [A] and A [f]](https://reader034.fdocuments.in/reader034/viewer/2022050103/5f41dfd7b0d90769b9681994/html5/thumbnails/9.jpg)
Κατασκευή σωρού σε Ο(n)Κατασκευή σωρού σε Ο(n)Τα στοιχεία είναι όλα διαθέσιμα στο πίνακα A
301
Τα στοιχεία είναι όλα διαθέσιμα στο πίνακα A
2928 32
236 75
2724 2331
ο τελευταίος κόμβος με παιδί είναι στη
4
22 34
ο τελευταίος κόμβος με παιδί είναι στη θέση: 9 div 2 = 4. Γενικότερα στη θέση:98
⎢ ⎥⎣ ⎦⎢ ⎥⎣ ⎦length [A]/2
![Page 10: Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A i)HEAPIFY (A, i) f ←left [i] r ←right (i)right (i) if f ≤heap-size [A] and A [f]](https://reader034.fdocuments.in/reader034/viewer/2022050103/5f41dfd7b0d90769b9681994/html5/thumbnails/10.jpg)
Κατασκευή σωρού σε Ο(n)Κατασκευή σωρού σε Ο(n)Τα στοιχεία είναι όλα διαθέσιμα στο πίνακα A
301
Τα στοιχεία είναι όλα διαθέσιμα στο πίνακα A
2928 32
236 75
2724 2331
Τελευταίος κόμβος με παιδί είναι στη θέση 10
4
22 34 35
Τελευταίος κόμβος με παιδί είναι στη θέση 10 div 2 = 5 δηλαδή:98 10
⎢ ⎥⎣ ⎦l th [A]/2⎢ ⎥⎣ ⎦length [A]/2
![Page 11: Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A i)HEAPIFY (A, i) f ←left [i] r ←right (i)right (i) if f ≤heap-size [A] and A [f]](https://reader034.fdocuments.in/reader034/viewer/2022050103/5f41dfd7b0d90769b9681994/html5/thumbnails/11.jpg)
Κατασκευή σωρού σε Ο(n)Κατασκευή σωρού σε Ο(n)Τα στοιχεία είναι όλα διαθέσιμα στο πίνακα A
301
Τα στοιχεία είναι όλα διαθέσιμα στο πίνακα A
2928 32
236 75
2724 23314
22 34 35 Σειρά εξέτασης κόμβων: length [A]/2 , length [A]/2 -1, 3 2 1
98 10⎢ ⎥⎣ ⎦ ⎢ ⎥⎣ ⎦3,2,1
![Page 12: Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A i)HEAPIFY (A, i) f ←left [i] r ←right (i)right (i) if f ≤heap-size [A] and A [f]](https://reader034.fdocuments.in/reader034/viewer/2022050103/5f41dfd7b0d90769b9681994/html5/thumbnails/12.jpg)
Κατασκευή σωρού σε Ο(n)Κατασκευή σωρού σε Ο(n)
Τα στοιχεία είναι όλα διαθέσιμα στο πίνακα A
BUILD-MAX-HEAP (A)
heap-size [A] ← length [A]for i ← length [A]/2 downto 1 do
MAX HEAPIFY (A i)MAX-HEAPIFY (A, i)
![Page 13: Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A i)HEAPIFY (A, i) f ←left [i] r ←right (i)right (i) if f ≤heap-size [A] and A [f]](https://reader034.fdocuments.in/reader034/viewer/2022050103/5f41dfd7b0d90769b9681994/html5/thumbnails/13.jpg)
Κατασκευή σωρού σε Ο(n)Κατασκευή σωρού σε Ο(n)
30112h
n+
⎡ ⎤⎢ ⎥⎢ ⎥
2928 32
2⎢ ⎥⎢ ⎥h=1
236 75 12h
n+
⎡ ⎤⎢ ⎥⎢ ⎥h=02724 23314 h=0
22 34 35 Σειρά εξέτασης κόμβων: 5,4,3,2,198 10
![Page 14: Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A i)HEAPIFY (A, i) f ←left [i] r ←right (i)right (i) if f ≤heap-size [A] and A [f]](https://reader034.fdocuments.in/reader034/viewer/2022050103/5f41dfd7b0d90769b9681994/html5/thumbnails/14.jpg)
Υπενθύμιση
1 1nn x + −Για 1x ≠
2
0
11 . . .1
n k n
k
xx x x xx=
∑−
= + + + + =−
Για 1x <0
11
k
kx
x∞
=∑ =
−0 1k x
k xk∞
20 (1 )k
k
xkxx=
∑ =−
![Page 15: Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A i)HEAPIFY (A, i) f ←left [i] r ←right (i)right (i) if f ≤heap-size [A] and A [f]](https://reader034.fdocuments.in/reader034/viewer/2022050103/5f41dfd7b0d90769b9681994/html5/thumbnails/15.jpg)
Κατασκευή σωρού σε Ο(n)
⎡ ⎤Το πολύ κόμβοι ύψους h12h
n+
⎡ ⎤⎢ ⎥⎢ ⎥
T(n) = lo g
11( ) ... ( )
2n
hh
n O h O n+
=∑ ⎡ ⎤ =⎢ ⎥⎢ ⎥
Υ θύ
2⎢ ⎥12 2h∞
∑• Υπενθύμιση: 20
2 22 11
2
hh =∑ = =
⎛ ⎞−⎜ ⎟⎝ ⎠
![Page 16: Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A i)HEAPIFY (A, i) f ←left [i] r ←right (i)right (i) if f ≤heap-size [A] and A [f]](https://reader034.fdocuments.in/reader034/viewer/2022050103/5f41dfd7b0d90769b9681994/html5/thumbnails/16.jpg)
Αλγόριθμος ταξινόμησης με σωρό - Heapsort
Input: πίνακας a[i], 1 ≤ i ≤ nOutput: πίνακας a[ij] a[ij] ≤ a[ij 1]Output: πίνακας a[ij], a[ij] ≤ a[ij+1]
Βήμα 1:Διαμόρφωση του πίνακα σε σωρόΒήμα 1: Διαμόρφωση του πίνακα σε σωρό
Βήμα 2: Επανέλαβε
• Πάρε το μεγαλύτερο στοιχείο
Α ί έ ό ό•Αφαίρεσέ το από το σωρό και αναδιάρθρωσε το σωρό
• Τοποθέτησέ το στην ελεύθερη θέση του τμήματος του πίνακαθέση του τμήματος του πίνακα που δεν είναι ταξινομημένο ****
![Page 17: Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A i)HEAPIFY (A, i) f ←left [i] r ←right (i)right (i) if f ≤heap-size [A] and A [f]](https://reader034.fdocuments.in/reader034/viewer/2022050103/5f41dfd7b0d90769b9681994/html5/thumbnails/17.jpg)
Παράδειγμα ταξινόμησης με σωρό - Heapsort
6 9 2 7 4 5 8
9
7 87 8
6 4 2 56 4 2 5
![Page 18: Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A i)HEAPIFY (A, i) f ←left [i] r ←right (i)right (i) if f ≤heap-size [A] and A [f]](https://reader034.fdocuments.in/reader034/viewer/2022050103/5f41dfd7b0d90769b9681994/html5/thumbnails/18.jpg)
Παράδειγμα ταξινόμησης με σωρό (ΔΙΑΓΡΑΦΗ 1ου στοιχείου)
9 7 8 6 4 2 5
9 8
7 8 7 57 5
6 4 2 5 6 4 26 4 2
8 7 5 6 4 2 9
8 9
![Page 19: Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A i)HEAPIFY (A, i) f ←left [i] r ←right (i)right (i) if f ≤heap-size [A] and A [f]](https://reader034.fdocuments.in/reader034/viewer/2022050103/5f41dfd7b0d90769b9681994/html5/thumbnails/19.jpg)
Heapsort
HeapSort()
nheap = 0;for i = 0 το n-1
Insert(a[i])Insert(a[i])
for i = n-1 το 0 v = Maximum()Delete()a[i] = v
********
![Page 20: Max heap: Min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12L11-Heapsort.pdf · MAX-HEAPIFY (A i)HEAPIFY (A, i) f ←left [i] r ←right (i)right (i) if f ≤heap-size [A] and A [f]](https://reader034.fdocuments.in/reader034/viewer/2022050103/5f41dfd7b0d90769b9681994/html5/thumbnails/20.jpg)
Αλγόριθμος Heapsort / Πολυπλοκότητα
( )∑ ∏ =⎟⎟⎞
⎜⎜⎛
=n n
nkk !logloglog ( )∑ ∏= =
=⎟⎟⎠
⎜⎜⎝
=k k
nkk1 1
!logloglog
Βήμα 1: Θ(n log n) ή Ο(n)
Βήμα 2: Θ(n log n)
Συνολικά: Θ(n log n)Συνολικά: Θ(n log n)