Κεφάλαιο 2. Η δομή δεδομένων Σωρός και η Ταξινόμηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.3, 14/11/2014

Σχετικά έγγραφα
Κεφάλαιο 2. Η δοµή δεδοµένων Σωρός και η Ταξινόµηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.1, 12/05/2010

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

σωροί ταξινόμηση σωρού οόροςheap σωρός (heap) συστοιχία Α για έναν σωρό μια δομή δεδομένων που πχ.

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ουρές Προτεραιότητας. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

Πελάτες φθάνουν στο ταμείο μιας τράπεζας Eνα μόνο ταμείο είναι ανοικτό Κάθε πελάτης παρουσιάζεται με ένα νούμερο - αριθμός προτεραιότητας Όσο ο

Εισαγωγή στους Αλγορίθμους Ενότητα 3η

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to

Heapsort Using Multiple Heaps

Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Ουρά Προτεραιότητας: Heap

13/5/2015 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ. Δομές Δεδομένων. Ουρές Προτεραιότητας

Δομές Δεδομένων Ενότητα 4

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

Δοµές Δεδοµένων. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Ουρές Προτεραιότητας 2

Ουρά Προτεραιότητας: Heap

ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ

Αλγόριθµοι και Πολυπλοκότητα

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

Κεφάλαιο 4. Άπληστοι Αλγόριθµοι (Greedy Algorithms) Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Ουρά Προτεραιότητας: Heap

Βασικές Έννοιες Δοµών Δεδοµένων

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

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

Δομές Δεδομένων (Data Structures)

Ουρές Προτεραιότητας: Υπενθύμιση. Σωροί / Αναδρομή / Ταξινόμηση. Υλοποίηση Σωρού. Σωρός (Εισαγωγή) Ορέστης Τελέλης

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ουρές προτεραιότητας Κεφάλαιο 9. Ε. Μαρκάκης Επίκουρος Καθηγητής

ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ

Διδάσκων: Παναγιώτης Ανδρέου

Ουρά Προτεραιότητας: Heap

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ουρές Προτεραιότητας Σωροί υλοποίηση και πράξεις Ο αλγόριθμος ταξινόμησης HeapSort

Αλγόριθμοι Ταξινόμησης Μέρος 3

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ουρές προτεραιότητας Κεφάλαιο 9. Ε. Μαρκάκης Επίκουρος Καθηγητής

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Κεφάλαιο 4. Διαίρει και Βασίλευε (Divide and Conquer) Παύλος Εφραιμίδης V1.1,

Εισαγωγή στους Αλγορίθμους

Αλγόριθμοι Eλάχιστα μονοπάτια

Εισαγωγή στους Αλγορίθμους Ενότητα 10η

Κεφάλαιο 3. Γραφήµατα v1.0 ( ) Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Κεφάλαιο 14 Προηγμένες Ουρές Προτεραιότητας

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Οντοκεντρικός Προγραμματισμός

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Κεφάλαιο 4. Διαίρει και Βασίλευε (Divide and Conquer) Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

JDSL Java Data Structures Library

Αλγόριθμοι και πολυπλοκότητα Συγχωνευτική Ταξινόμηση

Ενότητα 7 Ουρές Προτεραιότητας

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 2

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

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Ταξινόμηση. Σαλτογιάννη Αθανασία

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

Κεφάλαιο 6 Ουρές Προτεραιότητας

Εισαγωγή στην Ανάλυση Αλγορίθμων (1) Διαφάνειες του Γ. Χ. Στεφανίδη

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 7η: Ουρές Προτεραιότητας Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Κεφάλαιο 8. NP και Υπολογιστική Δυσεπιλυσιμότητα. Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 8: ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ΑΛΓΟΡΙΘΜΟΣ HEAPSORT

Κεφάλαιο 8. NP και Υπολογιστική Δυσεπιλυσιµότητα. Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Κεφάλαιο 4. Αλγόριθμος του Dijkstra. Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Merge Sort (Ταξινόμηση με συγχώνευση) 6/14/2007 3:04 AM Merge Sort 1

Αλγόριθμοι Ταξινόμησης Μέρος 2

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

8. Σωροί (Heaps)-Αναδρομή- Προχωρημένη Ταξινόμηση

Δομές Δεδομένων (Data Structures)

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Κεφάλαιο 3. Γραφήματα. v1.3 ( ) Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Κεφάλαιο 8. NP και Υπολογιστική Δυσεπιλυσιμότητα. Παύλος Εφραιμίδης V1.1,

Σχεδίαση και Ανάλυση Αλγορίθμων

Ενότητα 7 Ουρές Προτεραιότητας

Δομές Δεδομένων. Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός. Καθηγήτρια Μαρία Σατρατζέμη

Βασικές δοµές δεδοµένων. Ορολογία λιστών. 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας

Διάλεξη 14: Δέντρα IV - B-Δένδρα

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

Ταξινόμηση με συγχώνευση Merge Sort

#4. Heaps (σωροί), η ταξινόμηση HeapSort, η δομή std::priority_queue της STL

Κεφάλαιο 1. Πέντε Αντιπροσωπευτικά Προβλήματα. Έκδοση 1.4, 30/10/2014. Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Δέντρα Αναζήτησης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 9: Ταξινόμηση Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

Δοµές Δεδοµένων. 12η Διάλεξη Διάσχιση Δέντρων και Ουρές Προτεραιότητας. Ε. Μαρκάκης

Πληροφορική 2. Δομές δεδομένων και αρχείων

Αλγόριθμοι Ταξινόμησης Μέρος 4

Κεφάλαιο 4. Δυναµικός Προγραµµατισµός (Dynamic Programming) Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

Δομές Δεδομένων (Data Structures)

ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων

Δομές δεδομένων. Ενότητα 5η: Υλοποίηση Λεξικών με Ισοζυγισμένα Δένδρα Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Εισαγωγή στους Αλγορίθμους Ενότητα 9η

Transcript:

Κεφάλαιο 2 Η δομή δεδομένων Σωρός και η Ταξινόμηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.3, 14/11/2014 Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne. 1

Σωρός και Ταξινόμηση Σωρού Στην ενότητα αυτή θα γνωρίσουμε την έννοια της ουράς προτεραιότητας (priority queue) τη δομή δεδομένων σωρός (heap), και τον αλγόριθμο ταξινόμησης σωρού (Heapsort)

Σε μια ουρά LIFO ή FIFO: ουρές προτεραιότητας (priority queues) Η σειρά εισόδου των στοιχείων στην ουρά καθορίζει και τη σειρά εξόδου. Δεν υπάρχει η έννοια προτεραιότητας για τα στοιχεία: όλα τα στοιχεία αντιμετωπίζονται με την ίδια προτεραιότητα. Ουρές για στοιχεία με προτεραιότητες: Συχνά χρειαζόμαστε δομές δεδομένων για την εισαγωγή στοιχείων που το καθένα έχει κάποια προτεραιότητα. Είναι σημαντικό να μπορούμε να αφαιρούμε το στοιχείο με τη μεγαλύτερη προτεραιότητα, χωρίς να μας ενδιαφέρει η σειρά με την οποία έγινε η εισαγωγή κάθε στοιχείου. Μια τέτοια ουρά που λαμβάνει υπόψη την προτεραιότητα κάθε στοιχείου ονομάζεται ουρά προτεραιότητας. Εφαρμογή: Στη χρονοδρομολόγηση διεργασιών σε ένα λειτουργικό σύστημα για παράδειγμα μπορεί να έχουμε διεργασίες διαφόρων επιπέδων προτεραιότητας, και να δρομολογούνται πρώτα οι εργασίες με την υψηλότερη προτεραιότητα. 3

ορισμός ουράς προτεραιότητας Η ουρά προτεραιότητας είναι μια δομή δεδομένων που: Διατηρεί ένα σύνολο στοιχείων S, όπου κάθε στοιχείο έχει μια συσχετισμένη τιμή key(v) που υποδηλώνει την προτεραιότητα του στοιχείου Υποστηρίζει προσθήκη και διαγραφή στοιχείων Υποστηρίζει την επιλογή του στοιχείου με το μικρότερο (ή μεγαλύτερο ανάλογα με την ουρά) κλειδί. 4

σωρός (heap) 5

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

Διευκρίνιση για τον όρο heap Heap (data structures): η δομή δεδομένων heap (σωρός) Heap (memory management): στο χώρο των λειτουργικών συστημάτων ο όρος heap είναι διαφορετικός όρος, αναφέρεται στο χώρο δυναμικής δέσμευσης μνήμης και δεν σχετίζεται με τη δομή δεδομένων heap Για παράδειγμα: http://en.wikipedia.org/wiki/heap_(data_structure) http://en.wikipedia.org/wiki/memory_management 7 ταξινόμηση σωρού Δομές Δεδομένων

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

παράδειγμα σωρού σωρός με ιδιότητα A[parent(i)] A[i] 1 1 2 3 3 12 parent(i) { return i/2 } left(i) { return 2i} right(i) { return 2i+1} 4 5 6 7 4 9 17 28 8 9 10 10 14 16 1 2 3 4 5 6 7 8 9 10 1 3 12 4 9 17 28 10 14 16 9

σωρός ελαχίστου ή μεγίστου δύο είδη δυαδικών σωρών: σωροί μεγίστου ιδιότητα: Α[γονέας(i)] A[i] ρίζα: περιέχει το μεγαλύτερο στοιχείο σωροί ελαχίστου ιδιότητα: Α[γονέας(i)] A[i] ρίζα: περιέχει το μικρότερο στοιχείο 10

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

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

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

Αλγόριθμος Heapify-up 2-14 ταξινόμηση σωρού

Αφαίρεση Κορυφαίου Στοιχείου 15

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

Αλγόριθμος Heapify-down 2-17 ταξινόμηση σωρού

ουρά προτεραιότητας (priority queue) δομή δεδομένων για τη διαχείριση ενός συνόλου στοιχείων H κάθε στοιχείο χαρακτηρίζεται από μία τιμή που ονομάζεται κλειδί (key) εφαρμογές: χρονοδρομολόγηση εργασιών εξομοίωση λειτουργίες μιας ουράς προτεραιότητας: StartHeap(H) Insert(H,x) FindMin(H) ή FindMax(H) ανάλογα με το είδος του σωρού Delete(H,x) ExtractMin(H) ή ExtractMax(H) ανάλογα με το είδος του σωρού Υλοποίηση με σωρό 18

Δημιουργία Σωρού σε Μη Κενό Πίνακα 19

δημιουργία σωρού Εάν έχουμε έναν πίνακα με n στοιχεία (χωρίς ταξινόμηση) μπορούμε να σχηματίσουμε μία σωρό με την ακόλουθη διαδικασία: Σαρώνουμε όλους τους κόμβους του σωρού, εκτός από τα φύλλα, από δεξιά προς τα αριστερά και από κάτω προς τα επάνω, και κάθε κόμβο εκτελούμε Heapify-down. Παράδειγμα: Στην παρακάτω σωρό εκτελούμε Heapify-down διαδοχικά για τους κόμβους 5, 4, 3, 2 και 1. 14 1 2 3 8 10 4 5 6 7 2 16 i 9 3 8 9 10 4 1 7 A 1 2 3 4 5 6 7 8 9 10 14 8 10 2 16 9 3 4 1 7 20

κατασκευή σωρού βασικές ιδέες: χρησιμοποιούμε τη μέθοδο αποκατάστασης σωρού προχωράμε με λογική bottom-up (από τα κάτω επίπεδα προς τα επάνω) 21 ταξινόμηση σωρού Δομές Δεδομένων

παράδειγμα κατασκευής σωρού A 1 2 3 4 5 6 7 8 9 10 14 8 10 2 16 9 3 4 1 7 α) β) 14 1 14 1 Heapify(A,5): Heapify(A,4): 2 3 2 3 8 10 8 10 4 5 6 7 2 16 i 9 3 4 5 6 7 2 i 7 9 3 8 9 10 4 1 7 14 1 γ) 2 3 Heapify(A,3): 8 10 i 4 5 6 7 1 7 9 3 8 9 10 4 2 16 8 9 10 4 1 16 1 22 ταξινόμηση σωρού Δομές Δεδομένων

παράδειγμα κατασκευής σωρού δ-1) Heapify(A,2): δ-2) Heapify(A,4): 14 14 1 2 3 8 i 3 4 5 6 7 1 7 9 10 2 3 1 3 4 5 6 7 8 7 9 10 8 9 10 4 2 16 8 9 10 4 2 16 1 23 ταξινόμηση σωρού Δομές Δεδομένων

ε-1) Heapify(A,1): 1 14 ε-2) Heapify(A,2): 1 1 2 3 1 3 2 3 14 3 4 5 6 7 2 7 9 10 8 9 10 4 8 16 4 5 6 7 2 7 9 10 8 9 10 4 8 16 1 1 ε-3) 2 3 2 3 Heapify(A,9): 4 5 6 7 14 7 9 10 8 9 10 4 8 16 24 ταξινόμηση σωρού Δομές Δεδομένων

θ) 1 1 2 3 2 3 4 5 6 7 4 7 9 10 8 9 10 14 8 16 A 1 2 3 4 5 6 7 8 9 10 1 2 3 4 7 9 10 14 8 16 25 ταξινόμηση σωρού Δομές Δεδομένων

πολυπλοκότητα δημιουργίας σωρού η διαίσθηση: O(n lg n) h = k k-1 1 0 κάθε κλήση της Heapify στοιχίζει Θ(lg n) γίνονται O(n) κλήσεις επομένως, η δημιουργία του σωρού στοιχίζει O(n lg n) lg n k πιο σφιχτή (tighter) ανάλυση: O(n) θεωρούμε n = 2 k -1 και πλήρες δυαδικό δέντρο ο χρόνος που απαιτεί η Heapify όταν εκτελείται για έναν κόμβο ύψους h είναι O(h) συνολικό κόστος = n h O( h) O( n ) O( n) h 1 h 2 h 0 2 lgn lgn h 0 χρησιμοποιώντας (χωρίς απόδειξη) ότι: h 0 h h 2 2 26 Δομές Δεδομένων

Δυαδικά Δέντρα 27

δυαδικό δέντρο αναδρομικός ορισμός: ένα δυαδικό δέντρο δεν περιλαμβάνει κόμβο, ή έχει τη μορφή: ρίζα αριστερό υποδέντρο δεξί υποδέντρο παραδείγματα δυαδικών δέντρων: 28

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

Ταξινόμηση Σωρού (Heapsort) 30

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

ταξινόμηση σωρού Αλγόριθμος Heapsort: Δίνεται πίνακας με n στοιχεία Κατασκευάζουμε έναν σωρό μέσα στον πίνακα Α σε χρόνο O(n) Εκτελούμε n-1 φορές: o Αφαιρούμε το κορυφαίο στοιχείο του σωρού και το τοποθετούμε στην τελευταία θέση του σωρού. Το στοιχείο που βρισκόταν στην τελευταία θέση του σωρού το τοποθετούμε στην κορυφή του σωρού. o Μειώνουμε κατά ένα το μέγεθος του σωρού (ελεθερώνοντας έτσι μία θέση στον πίνακα) o Εκτελούμε Heapify-down στην κορυφή του σωρού 32

ταξινόμηση σωρού Αλγόριθμος Heapsort: Δίνεται πίνακας με n στοιχεία Κατασκευάζουμε έναν σωρό μέσα στον πίνακα Α σε χρόνο O(n) Εκτελούμε n-1 φορές: o Αφαιρούμε το κορυφαίο στοιχείο του σωρού και το τοποθετούμε στην τελευταία θέση του σωρού. Το στοιχείο που βρισκόταν στην τελευταία θέση του σωρού το τοποθετούμε στην κορυφή του σωρού. o Μειώνουμε κατά ένα το μέγεθος του σωρού (ελεθερώνοντας έτσι μία θέση στον πίνακα) o Εκτελούμε Heapify-down στην κορυφή του σωρού Ο βρόχος εκτελείται n-1 φορές και κάθε εκτέλεση γίνεται σε χρόνο O(log n): Επομένως η φάση αυτή του αλγορίθμου απαιτεί χρόνο O(n logn). Σύνολο: O(n) + O(n log n) = O (n logn) 33

ταξινόμηση σωρού άλλος ένας αλγόριθμος ταξινόμησης πολυπλοκότητας O(n lοg(n)) Ιδιαίτερα χαρακτηριστικά: χρησιμοποιεί τη δομή δεδομένων σωρός είναι in place (επιτόπια): το πλήθος των στοιχείων της συστοιχίας εισόδου που είναι αποθηκευμένα εκτός της συστοιχίας αυτής ανά πάσα στιγμή δεν υπερβαίνει μια σταθερή ποσότητα είναι stable, δηλαδή στοιχεία που έχουν την ίδια τιμή στο κλειδί διατηρούν μετά την ταξινόμηση την ίδια μεταξύ τους διάταξη που είχαν πριν την ταξινόμηση 34

πηγές/αναφορές Κεφάλαιο 2, Σχεδίαση Αλγορίθμων, J. Kleinberg and E. Tardos, Ελληνική έκδοση από τις Εκδ. Κλειδάριθμος Κεφάλαιο 6, Εισαγωγή στους αλγόριθμους, T. Cormen, C. Leiserson, R. Rivest and C. Stein, Ελληνική έκδοση από τις Πανεπιστημιακές Εκδ. Κρήτης 35