max heap: min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12l11-heapsort.pdf · max-heapify (a...
TRANSCRIPT
Εφαρμογές σωρούΕφαρμογές σωρού
Max heap: χρονοπρογραμματισμός
Min heap: simulation
Ταξινόμηση με τη βοήθεια σωρού
Εφαρμογές σωρούΕφαρμογές σωρού
161
1014 14 1332
314 6
6 75108 394
2 4 798 10
Διατήρηση σωρού
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]
Διατήρηση σωρού: πολυπλοκότηταΔιατήρηση σωρού: πολυπλοκότητα
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)
Κατασκευή σωρού on - line
Input: τα στοιχεία καταφθάνουν το ένα μετά το άλλο: a[i] 1 ≤ i ≤ nτο άλλο: a[i], 1 ≤ i ≤ n(θεωρούμε ότι τα στοιχεία δεν είναι διαθέσιμα σε ένα πίνακα)σε ένα πίνακα)
Output: Δομή σωρούOutput: Δομή σωρού
Παράδειγμα: Ακολουθία στοιχείωνρ γμ χ
1 2 3 4 . . .
Παράδειγμα (κατασκευή σωρού 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
Κατασκευή Σωρού / on - line
ConstructHeap;p
nheap := 0;pfor i := 1 to n do
insert(a[i]);end; ****
Κατασκευή Σωρού 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)
Κατασκευή σωρού σε Ο(n)Κατασκευή σωρού σε Ο(n)Τα στοιχεία είναι όλα διαθέσιμα στο πίνακα A
301
Τα στοιχεία είναι όλα διαθέσιμα στο πίνακα A
2928 32
236 75
2724 2331
ο τελευταίος κόμβος με παιδί είναι στη
4
22 34
ο τελευταίος κόμβος με παιδί είναι στη θέση: 9 div 2 = 4. Γενικότερα στη θέση:98
⎢ ⎥⎣ ⎦⎢ ⎥⎣ ⎦length [A]/2
Κατασκευή σωρού σε Ο(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
Κατασκευή σωρού σε Ο(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
Κατασκευή σωρού σε Ο(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)
Κατασκευή σωρού σε Ο(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
Υπενθύμιση
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=
∑ =−
Κατασκευή σωρού σε Ο(n)
⎡ ⎤Το πολύ κόμβοι ύψους h12h
n+
⎡ ⎤⎢ ⎥⎢ ⎥
T(n) = lo g
11( ) ... ( )
2n
hh
n O h O n+
=∑ ⎡ ⎤ =⎢ ⎥⎢ ⎥
Υ θύ
2⎢ ⎥12 2h∞
∑• Υπενθύμιση: 20
2 22 11
2
hh =∑ = =
⎛ ⎞−⎜ ⎟⎝ ⎠
Αλγόριθμος ταξινόμησης με σωρό - 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: Επανέλαβε
• Πάρε το μεγαλύτερο στοιχείο
Α ί έ ό ό•Αφαίρεσέ το από το σωρό και αναδιάρθρωσε το σωρό
• Τοποθέτησέ το στην ελεύθερη θέση του τμήματος του πίνακαθέση του τμήματος του πίνακα που δεν είναι ταξινομημένο ****
Παράδειγμα ταξινόμησης με σωρό - Heapsort
6 9 2 7 4 5 8
9
7 87 8
6 4 2 56 4 2 5
Παράδειγμα ταξινόμησης με σωρό (ΔΙΑΓΡΑΦΗ 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
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
********
Αλγόριθμος 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)