27
Δομές Δεδομένων και Αλγόριθμοι ταξινόμηση σωρού 1 ταξινόμηση σωρού Παύλος Εφραιμίδης

DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι ταξινόμηση σωρού1

ταξινόμηση σωρού

Παύλος Εφραιμίδης

Page 2: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι ταξινόμηση σωρού2

ταξινόμηση σωρού

άλλος ένας αλγόριθμος ταξινόμησηςπολυπλοκότητας O(n·lgn)

Ιδιαίτερα χαρακτηριστικά:– χρησιμοποιεί μια δομή δεδομένων που ονομάζεται«σωρός»

– είναι επιτόπια: το πλήθος των στοιχείων της συστοιχίαςεισόδου που είναι αποθηκευμένα εκτός της συστοιχίαςαυτής ανά πάσα στιγμή δεν υπερβαίνει μια σταθερήποσότητα

Page 3: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι ταξινόμηση σωρού3

σωρός (heap)

ένα αντικείμενο τύπου συστοιχίας ή πίνακα (array) τοοποίο μπορεί να θεωρηθεί ως σχεδόν πλήρεςδυαδικό δέντροκάθε κόμβος του δέντρου αντιστοιχεί σε ένα στοιχείοτης συστοιχίας και περιέχει την τιμή αυτούτο δέντρο είναι συμπληρωμένο σε όλα τα επίπεδαεκτός ίσως από το τελευταίο το οποίο είναισυμπληρωμένο από τα αριστερά μέχρι κάποιουσημείου

Page 4: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι ταξινόμηση σωρού4

ο όρος heap

σωρός (heap): δομή δεδομένωνheap στο χώρο των λειτουργικώνσυστημάτων και των γλωσσώνπρογραμματισμού– διαφορετικός όρος – δεν σχετίζεται με τη δομήδεδομένων heap

– αναφέρεται στο χώρο δυναμικής δέσμευσηςμνήμης

Page 5: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι ταξινόμηση σωρού5

συστοιχία Α για έναν σωρό

το αντικείμενο – συστοιχία Α πουαντιπροσωπεύει έναν σωρό περιλαμβάνει ταακόλουθα δύο πεδία– μήκος [Α]: το πλήθος των στοιχείων τηςσυστοιχίας

– μέγεθος-σωρού[Α]: το πλήθος των στοιχείων τουσωρού που είναι αποθηκευμένα εντός τηςσυστοιχίας

Page 6: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 6

σωροί

• μια δομή δεδομένων που– είναι ένα σχεδόν πλήρες δυαδικό δέντρο– ικανοποιεί την ιδιότητα σωρού: A[parent(i)] ≥ A[i]

• πχ.Parent(i) { return }Left(i) { return 2i}Right(i) { return 2i+1}

16

14 10

8 7 9 3

2 4 1

1

2 3

4 5 6 7

8 9 10

16 14 10 8 7 9 3 2 4 11 2 3 4 5 6 7 8 9 10

⎥⎦⎥

⎢⎣⎢

2i

Page 7: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 7

δυαδικό δέντρο• δεν περιλαμβάνει κόμβο, ή• πχ.

• φύλλο: κόμβος χωρίς απογόνους• σε πλήρες δυαδικό δέντρο:

– κάθε κόμβος έχει 2 παιδιά ή κανένα παιδί– όλα τα φύλλα έχουν το ίδιο βάθος– όλοι οι εσωτερικοί κόμβοι έχουν 2 παιδιά

ρίζα

αριστερόυποδέντρο

δεξίυποδέντρο

Page 8: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 8

ελαχίστου ή μεγίστου

• δύο είδη δυαδικών σωρών:– σωροί μεγίστου

• ιδιότητα: Α[ΠΑΤΡΙΚΟΣ(i)]≥A[i]• ρίζα: περιέχει το μεγαλύτερο στοιχείο

– σωροί ελαχίστου• ιδιότητα: Α[ΠΑΤΡΙΚΟΣ(i)]≤A[i]• ρίζα: περιέχει το μικρότερο στοιχείο

Page 9: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 9

βασικές διαδικασίες

• αποκατάσταση ιδιότητας μεγίστου σωρού• κατασκευή σωρού μεγίστου• ταξινόμηση σωρού• διαδικασίες

– εισαγωγή σε σωρό μεγίστου– εξαγωγή μεγίστου σωρού– αύξηση κλειδιού σωρού– μέγιστο σωρού

Page 10: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 10

διατήρηση της ιδιότητας σωρού

• συνθήκη:το A[i] μπορεί να έχει πάρει τιμή μικρότερηαπό (κάποιο από) τα παιδιά του

σωροί

A[i]

Page 11: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 11

αποκατάσταση ιδιότητας σωρού

• δίνεται:– συστοιχία Α– θέση i κάποιου στοιχείου της συστοιχίας– τα δυαδικά υπο-δέντρα απόγονοι του κόμβου

i είναι σωροί μεγίστου– το A[i] ενδέχεται να παραβιάζει την ιδιότητασωρού μεγίστου

• λύση: γίνετε μετακύλιση της τιμής Α[i] προς το κατάλληλο υποδέντρο

Page 12: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 12

16

4 10

14 7 9 3

2 8 1

1

2 3

4 5 6 7

8 9 10

16

14 10

4 7 9 3

2 8 1

1

2 3

4 5 6 7

8 9 10

1

16

14 10

8 7 9 3

2 4 1

2 3

4 5 6 7

8 9 10

Heapify(A,2): Heapify(A,4):

Heapify(A,9):

Page 13: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 13

ψευδοκώδικας Heapify(A,i)

• χρόνος: O(lg n), T(n)≤T(2n/3)+Θ(1)

Page 14: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 14

κατασκευή σωρού

• βασικές ιδέες:– χρησιμοποιούμε τη μέθοδο αποκατάστασηςσωρού

– προχωράμε με λογική bottom-up (αναβιβαστικά)

Page 15: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 15

παράδειγμα κατασκευής σωρού4 1 3 2 16 9 10 14 8 71 2 3 4 5 6 7 8 9 10

A

4

1 3

2 16 9 10

14 8 7

2 3

4 5 6 7

8 9 10

i

1 4

1 3

2 16 9 10

14 8 7

2 3

4 5 6 7

8 9 10

i

1

4

1 3

14 16 9 10

2 8 7

2 3

4 5 6 7

8 9 10

i

1 4

1 10

14 16 9 3

2 8 7

2 3

4 5 6 7

8 9 10

i

1

Page 16: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 16

4

16 10

14 7 9 3

2 8 1

2 3

4 5 6 7

8 9 10

i1 16

14 10

8 7 9 3

2 4 1

2 3

4 5 6 7

8 9 10

1

Page 17: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 17

ανάλυση

• η διαίσθηση: O(n lg n)– κάθε κλήση της Heapify στοιχίζει Θ(lg n)– γίνονται O(n) κλήσεις– επομένως, η δημιουργία του σωρού στοιχίζει O(n lg n)

• πιο σφιχτή (tighter) ανάλυση: O(n)– θεωρούμε n = 2k-1 και πλήρες δυαδικό δέντρο– ο χρόνος που απαιτεί η Heapify όταν εκτελείται για ένανκόμβο ύψους h είναι O(h)

– συνολικό κόστος =

χρησιμοποιώντας (άσκηση) ότι:

h = kk-1…10

⎡ ⎤ kn =lg

⎣ ⎦ ⎣ ⎦)()

2()(

2

lg

0

lg

01 nOhnOhOn n

hh

n

hh ==⎥⎥

⎤⎢⎢⎡ ∑∑

==+

220

=∑∞

=hh

h

Page 18: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 18

ταξινόμηση σωρού• Έστω ότι έχουμε υλοποιημένη μια δομήδεδομένων σωρός.Πως μπορούμε να τη χρησιμοποιήσουμε για ναταξινομήσουμε μία ακολουθία στοιχείων;

Page 19: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 19

αλγόριθμος heapsort

----O(n)

----O(lg n)

πολυπλοκότητα χρόνου = O(n lg n)

Page 20: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 20

ουρές προτεραιότητας

Page 21: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 21

ουρά προτεραιότητας(priority queue)

• μια δομή δεδομένων για τη διαχείριση ενόςσυνόλου στοιχείων S

• κάθε στοιχείο στοιχείο χαρακτηρίζεται από μίατιμή που ονομάζεται κλειδί (key)

• εφαρμογή:– χρονοδρομολόγηση εργασιών– εξομοίωση

• λειτουργίες μιας ουράς προτεραιότητας:– Insert(S,x)– Maximum(S)– Extract-Max(S)

Implement with a heap.

Page 22: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 22

εισαγωγή στοιχείου

• εισαγωγή στοιχείου στο σωρό1. επεκτείνουμε το σωρό κατά 1 θέση2. στην καινούργια θέση (που βρίσκεται στην

τελευταία θέση) τοποθετούμε την ελάχιστηδυνατή τιμή, πχ. μείον άπειρο

3. εκτελούμε τη διαδικασία αύξησης της τιμήςκλειδιού για το στοιχείο στην τελευταία θέσηαπό την ελάχιστη δυνατή τιμή στηνεπιθυμητή τιμή:διαδικασία Heap-Increase-Key(A,i,key)

Page 23: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 23

----O(lg n)

Page 24: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 24

----O(lg n)

Page 25: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 25

κλειδί = 15, HeapInsert(A,κλειδί):16

14 10

8 7 9 3

2 4 1

1

2 3

4 5 6 7

8 9 10

16

14 10

8 7 9 3

2 4 1

1

2 3

4 5 6 7

8 9 10

A

1511

16

14 10

8

7

9 3

2 4 1

1

2 3

4 5 6 7

8 9 10

15

11

16

14

10

8

7

9 3

2 4 1

1

2 3

4 5 6 7

8 9 10

15

11

Page 26: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι

ταξινόμηση σωρού 26

Page 27: DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt Author: pavlos Created Date: 6/14/2007 9:32:42 PM

Δομές Δεδομένων καιΑλγόριθμοι ταξινόμηση σωρού27

Αναφορές/Πηγές

Εισαγωγή στους αλγόριθμους, Κεφάλαιο 6