DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt...

Post on 13-Jul-2020

6 views 0 download

Transcript of DSAlg Lec06 Heapsort - Euclid · Heapify(A,9): ... Microsoft PowerPoint - DSAlg Lec06 Heapsort.ppt...

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

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

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

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

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

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

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

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

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

σωρός (heap)

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

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

ο όρος heap

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

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

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

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

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

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

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

ταξινόμηση σωρού 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

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

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

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

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

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

ρίζα

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

σωροί

A[i]

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

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

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

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

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

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

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

ταξινόμηση σωρού 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):

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

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

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

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

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

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

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

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

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

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

ταξινόμηση σωρού 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

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

ταξινόμηση σωρού 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

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

ταξινόμηση σωρού 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

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

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

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

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

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

αλγόριθμος heapsort

----O(n)

----O(lg n)

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

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

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

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

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

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

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

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

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

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

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

Implement with a heap.

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

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

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

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

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

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

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

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

----O(lg n)

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

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

----O(lg n)

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

ταξινόμηση σωρού 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

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

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

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

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

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