max heap: min heap: simulationcgi.di.uoa.gr/~vassilis/ac/12l11-heapsort.pdf · max-heapify (a...

20
Εφαρμογές σωρού Εφαρμογές σωρού Max heap: χρονοπρογραμματισμός Min heap: simulation Ταξινόμηση με τη βοήθεια σωρού

Upload: others

Post on 13-Jul-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

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]

Εφαρμογές σωρούΕφαρμογές σωρού

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]

Εφαρμογές σωρούΕφαρμογές σωρού

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]

Διατήρηση σωρού

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]

Διατήρηση σωρού: πολυπλοκότηταΔιατήρηση σωρού: πολυπλοκότητα

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]

Κατασκευή σωρού 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]

Παράδειγμα (κατασκευή σωρού 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]

Κατασκευή Σωρού / 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]

Κατασκευή Σωρού 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]

Κατασκευή σωρού σε Ο(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]

Κατασκευή σωρού σε Ο(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]

Κατασκευή σωρού σε Ο(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]

Κατασκευή σωρού σε Ο(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]

Κατασκευή σωρού σε Ο(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]

Υπενθύμιση

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]

Κατασκευή σωρού σε Ο(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]

Αλγόριθμος ταξινόμησης με σωρό - 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]

Παράδειγμα ταξινόμησης με σωρό - 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]

Παράδειγμα ταξινόμησης με σωρό (ΔΙΑΓΡΑΦΗ 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]

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]

Αλγόριθμος 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)