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

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

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

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

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

Quicksort. Πρόβλημα Ταξινόμησης. Μέθοδοι Ταξινόμησης. Συγκριτικοί Αλγόριθμοι

έντρα ιδάσκοντες:. Φωτάκης,. Σούλιου Επιμέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

ιδάσκοντες: Φ. Αφράτη,. Φωτάκης,. Σούλιου Επιμέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

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

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

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

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

Quicksort. Επιμέλεια διαφανειών: Δ. Φωτάκης Μικροαλλαγές: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Union Find, Λεξικό. Δημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

Επιλογή. Επιμέλεια διαφανειών: Δ. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

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

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

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

Quicksort. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Quicksort. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

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

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

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

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

Επιλογή. Πρόβλημα Επιλογής. Μέγιστο / Ελάχιστο. Εφαρμογές

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

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

Λεξικό, Union Find. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

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

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

Επιλογή. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

Επιλογή. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

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

Πρόβληµα (ADT) Λεξικού. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Λεξικό, Union - Find 2

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

ιαίρει-και-βασίλευε ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

Λεξικό, Union Find. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Quicksort [Hoare, 62] Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Quicksort 1

Λεξικό, Union Find. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Διαίρει-και-Βασίλευε. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Διαίρει-και-Βασίλευε 2

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

Επιμέλεια διαφανειών: Δ. Φωτάκης Τροποποιήσεις-προσθήκες: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Λεξικό, Union Find. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

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

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

Αναζήτηση Κατά Πλάτος

Ασυμπτωτικός Συμβολισμός

Λεξικό, Union Find. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

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

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

Πρόβληµα Επιλογής. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Επιλογή 1

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

Συντομότερες Διαδρομές

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

Ελάχιστο Συνδετικό Δέντρο

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

Ελάχιστο Συνδετικό Δέντρο

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

Δυναμικός Προγραμματισμός

Αναζήτηση Κατά Πλάτος

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

Ελάχιστο Συνδετικό Δέντρο

Ελάχιστο Συνδετικό έντρο

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

Βασικές Έννοιες Θεωρίας Γραφημάτων

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

Διαίρει-και-Βασίλευε. Διαίρει-και-Βασίλευε. MergeSort. MergeSort. Πρόβλημα Ταξινόμησης: Είσοδος : ακολουθία n αριθμών (α 1

Βασικές Έννοιες Θεωρίας Γραφημάτων

Σχεδιαση Αλγοριθμων -Τμημα Πληροφορικης ΑΠΘ - Κεφαλαιο 9ο

Ελάχιστο Συνδετικό έντρο

Δυναμικός Προγραμματισμός

Αλγόριθμοι Αναζήτησης

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

Συντομότερες Διαδρομές

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

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

Αναζήτηση Κατά Πλάτος

Αναζήτηση Κατά Πλάτος

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

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

Heapsort Using Multiple Heaps

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

Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

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

Αναζήτηση Κατά Βάθος. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Δυναμικός Προγραμματισμός

για NP-Δύσκολα Προβλήματα

Συντομότερες ιαδρομές

Αναδρομικές Σχέσεις «ιαίρει-και-βασίλευε»

Αλγόριθμοι ταξινόμησης

Αναζήτηση Κατά Βάθος. Επιμέλεια διαφανειών: Δ. Φωτάκης Συμπληρώσεις: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

υαδικά έντρα Αναζήτησης

Συντομότερες ιαδρομές

2.2.5 ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ

Ελαφρύτατες διαδρομές

Σύνοψη Προηγούμενου. Πίνακες (Arrays) Πίνακες (Arrays): Βασικές Λειτουργίες. Πίνακες (Arrays) Ορέστης Τελέλης

Δομές Δεδομένων - Εργαστήριο 5. Ουρές Προτεραιότητας

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

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

1η Σειρά Γραπτών Ασκήσεων

Transcript:

Ουρά Προτεραιότητας: Heap Επιμέλεια διαφανειών: Δ. Φωτάκης (λίγες τροποποιήσεις: Α. Παγουρτζής) Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

Δομές Δεδομένων (Αναπαράσταση,) οργάνωση και διαχείριση συνόλων δεδομένων για αποδοτική ενημέρωση και ανάκτηση πληροφορίας. Αποδοτική υλοποίηση αλγορίθμων και Βάσεων Δεδομένων. (Αποδοτική) αναπαράσταση οργάνωση «σύνθετων» αντικειμένων με χρήση: Βασικών τύπων δεδομένων (ints, floats, chars, strings, arrays). Μηχανισμών που παρέχονται από γλώσσες προγραμματισμού (structs records, objects). Διαχείριση: υλοποίηση στοιχειωδών λειτουργιών Ταξινόμηση, αναζήτηση, min/max/median, first/last,... Εισαγωγή, διαγραφή, ενημέρωση. Λύσεις και τεχνικές για αποδοτική διαχείριση δεδομένων. Ανάλυση για απαιτήσεις και καταλληλότητα. Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας

Γενικευμένος Τύπος Δεδομένων Abstract Data Type (ADT): μοντέλο περιγραφής δομών δεδομένων ή τύπων δεδομένων με παρόμοιες ιδιότητες. Έμμεση περιγραφή: με επιθυμητές λειτουργίες (μεθόδους) επί των στιγμιοτύπων του. π.χ. Array, Stack, List, Set, Tree Δομή Δεδομένων: Υλοποίηση ενός ADT Αναπαράσταση οργάνωση δεδομένων και υλοποίηση λειτουργιών με κατάλληλους αλγόριθμους. Διατύπωση: ορισμός αναπαράστασης και περιγραφή υλοποίησης λειτουργιών (ψευδο-κώδικας). Ανάλυση: προσδιορισμός απαιτήσεων σε χώρο αποθήκευσης και χρόνο εκτέλεσης για κάθε (βασική) λειτουργία. Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας

Ουρά Προτεραιότητας (Priority Queue) Ουρά όπου σειρά εξόδου / διαγραφής καθορίζεται από προτεραιότητα. Δεδομένα στοιχείων: προτεραιότητα, πληροφορία. Επιθυμητές λειτουργίες: insert(x): εισαγωγή x. deletemax(): διαγραφή και επιστροφή στοιχείου μέγιστης προτεραιότητας. getmax(): επιστροφή στοιχείου μέγιστης προτεραιότητας (χωρίς διαγραφή). changepriority(x,p): αλλαγή προτεραιότητας στοιχείου x σε p. isempty(), size(): βοηθητικές λειτουργίες. Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας

Εφαρμογές Άμεσες εφαρμογές: Υλοποίηση ουρών αναμονής με προτεραιότητες. Δρομολόγηση με προτεραιότητες. Largest (Smallest) Processing Time First. Έμμεσες εφαρμογές: Βασικό συστατικό πολλών ΔΔ και αλγορίθμων: HeapSort (γενικά ταξινόμηση με επιλογή). Αλγόριθμος Huffman. Αλγόριθμοι Prim και Dijkstra.... Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας

Υλοποίηση ουρών προτεραιότητας Ουρές Προτεραιότητας: Ολική διάταξη στοιχείων με βάση προτεραιότητα. Προτεραιότητα καθορίζεται με ακέραιο ριθμό (με συνήθη διάταξη) που περιέχεται σε κάθε στοιχείο. Επεκτείνεται σε κάθε σύνολο με σχέση ολικής διάταξης (ρητοί, πραγματικοί, λέξεις, εισοδήματα,...). Ουρά Προτεραιότητας με γραμμική λίστα: Διαγραφή μέγιστου ή εισαγωγή απαιτεί γραμμικό χρόνο. Υλοποίηση ουράς προτεραιότητας με σωρό (heap). Δυαδικό δέντρο με διάταξη σε κάθε μονοπάτι ρίζα φύλλο. Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας

Ιεραρχικές Δομές: Δέντρα Γράφημα ακυκλικό και συνεκτικό. Δέντρο με n κορυφές έχει m = n ακμές. Δέντρο με ρίζα : Ιεράρχηση Ύψος : μέγιστη απόσταση από ρίζα. Δυαδικό δέντρο : έχει ρίζα και κάθε κορυφή παιδιά : Αριστερό και δεξί. Κάθε υποδέντρο είναι δυαδικό δέντρο. Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας

Δυαδικά Δέντρα n(h): #κορυφών σε ΔΔ ύψους h. h + n(h) < h+ h+ επίπεδα, κορ. / επίπ. i κορυφές στο επίπεδο i. + + + h = h + h(n): ύψος ΔΔ με n κορυφές: log n - < h(n) n Γεμάτο (full): Κάθε κορυφή είτε φύλλο είτε παιδιά. Πλήρες (complete) : Όλα τα επίπεδα συμπληρωμένα (εκτός ίσως από τελευταίο). Τέλειο (perfect): n = h + 8 9 0 Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας 8

Πλήρες δυαδικό δέντρο Όλα τα επίπεδα συμπληρωμένα εκτός ίσως από τελευταίο που γεμίζει από αριστερά προς τα δεξιά. n(h): #κορυφών για ύψος h: h n(h) < h + Τέλειο(h) : h+ Τέλειο(h ) + : ( h ) + = h. h(n): ύψος για n κορυφές: log n - < h(n) log n h( n ) = log n Επομένως : n(h) = Θ( h ) h(n) = Θ(log n) #φύλλων = n / 8 9 0 8 9 Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας 9

Αναπαράσταση Γενικά δέντρα: δείκτες σε παιδιά, πατέρα (δυναμική). Πλήρη δυαδικά δέντρα : Πίνακας (στατική). Αρίθμηση αριστερά δεξιά και πάνω κάτω. Ρίζα : Π[] Π[ i ] : πατέρας Π[ i / ] αριστερό παιδί Π[ i ] δεξιό παιδί Π[ i + ] 0 8 0 0 0 8 8 9 0 Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας 0

Σωρός (heap) Δέντρο μέγιστου (ελάχιστου): Τιμές στις κορυφές και τιμή κάθε κορυφής () τιμές παιδιών της. Σωρός : πλήρες δυαδικό δέντρο μέγιστου (ελάχιστου). Ύψος Θ(log n), #φύλλων = n / 0 0 Πίνακας Α[ ] με ιδιότ. σωρού : i A[ i ] max(a[ i ], A[ i + ]) 8 9 0 8 Μέγιστο : ρίζα Ελάχιστο : κάποιο φύλλο 0 0 8 Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας

Σωροί και Μη-Σωροί 0 0 9 0 0 8 8 0 9 0 0 8 8 Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας

Σωρός σαν Ουρά Προτεραιότητας int A[n], hs; getmax() : Ο() int getmax() { return(a[]); } deletemax() : int deletemax() { if (isempty()) return(empty); max = A[]; A[] = A[hs--]; combine(); return(max); } 0 0 8 0 0 8 combine(i) : αποκατάσταση ιδιότητας σωρού σε υποδέντρο θέσης i αν μόνο στοιχείο Α[i] λάθος Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας

Αποκατάσταση Προς-τα-Κάτω combine( i ) : Ενόσω όχι σωρός (Α[ i ] < max(a[ i ], A[ i+ ])) - Α[ i swap ] max(a[ i ], A[ i+ ]) - συνέχεια στο αντίστοιχο υποδέντρο. combine(int i) { l = *i; r = *i+; cur = i; if ((l <= hs) && (A[l] > A[cur])) cur = l; if ((r <= hs) && (A[r] > A[cur])) 0 cur = r; if (cur!= i) { swap(a[i], A[cur]); combine(cur); } } 8 0 8 Χρόνος για deletemax() : Ο(ύψος) = O(log n) Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας

Εισαγωγή: Αποκατάσταση Προς-τα-Πάνω swap insert( k ) : Εισαγωγή στο τέλος. Ενόσω όχι σωρός (Α[ i ] > A[ i / ]) swap A[ i ] A[ i / ] 9 0 insert(int k) { A[++hs] = k; i = hs; p = i / ; while ((i > ) && (A[p] < A[i])) { swap(a[p], A[i]); i = p; p = i / ; } } 0 9 8 9 Χρόνος για insert() : Ο(ύψος) = O(log n) Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας

Αλλαγή προτεραιότητας Αύξηση προτεραιότητας : παρόμοια με εισαγωγή (αποκατ. προς-τα-πάνω). Μείωση προτεραιότητας : παρόμοια με διαγραφή (αποκατ. προς-τα-κάτω). Χρόνος: Ο(ύψος) = O(log n) Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας

Δημιουργία Σωρού Α[n] σωρός με n εισαγωγές [,,, 0, 8,,,,,, 0] 0 Χρόνος O(n log n). 0 Ιεραρχικά (bottom-up): Υποδέντρα-σωροί ενώνονται σε δέντρο-σωρό. constructheap(int n) { hs = n; for (i = n / ; i > 0; i--) combine(i); } 0 0 8 0 0 8 Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας

Χρόνος Δημιουργίας for (i = n / ; i > 0; i--) combine(i); 0 Χρόνος combine( i ) = Ο(n - ύψος i ). n / στοιχεία n / 8 στοιχεία χρόνος c χρόνος c...................... n / k στοιχεία χρόνος (k )c, k log n 0 8 Χρόνος constructheap( ) = Θ(n). Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας 8

Απόδοση Σωρού Χώρος : Θ() (in-place) Χρόνοι : constructheap : Θ(n) insert, deletemax : O(log n) getmax, size, isempty : Θ() Εξαιρετικά εύκολη υλοποίηση! Συμπέρασμα: Γρήγορη και ευρύτατα χρησιμοποιούμενη ουρά προτεραιότητας. Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας 9

Heap-Sort Αρχικοποίηση : δημιουργία σωρού με n στοιχεία. constructheap() : χρόνος Θ(n). Εξαγωγή μέγιστου και τοποθέτηση στο τέλος (n φορές). deletemax() : χρόνος Θ(log n). Χρόνος : Θ(n) + n Θ(log n) = Θ(n log n). constructheap(n); // hs = n for (i = n; i > ; i--) { swap(a[], A[i]); hs--; combine(); } Χρονική Πολυπλοκότητα Ταξινόμησης: Ο(n log n). Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας 0

Ουρές Προτεραιότητας Heap-Sort : Παράδειγμα 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 constructheap(n); // hs = n for (i = n; i > ; i--) { swap(a[], A[i]); hs--; combine(); } Αλγόριθμοι & Πολυπλοκότητα (0-8)

Συγκριτικοί Αλγόριθμοι Ταξινόμηση μόνο με συγκρίσεις και μετακινήσεις στοιχείων. Καμία άλλη ενέργεια στα στοιχεία (π.χ. ομαδοποίηση με βάση δυαδική αναπαράσταση). Κάθε ντετερμινιστικός συγκριτικός αλγ. ταξινόμησης χρειάζεται Ω(n log n) συγκρίσεις μεταξύ στοιχείων. Αντίστοιχο κάτω φράγμα για πιθανοτικούς αλγόριθμους. Χρονική Πολυπλοκότητα Ταξινόμησης: Θ(n log n) Υπάρχουν αλγόριθμοι με γραμμικό χρόνο για συγκεκριμένους τύπους δεδομένων (π.χ. αριθμούς). Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας

Δέντρο Συγκρίσεων Λειτουργία συγκριτικών αλγορίθμων αναπαρίσταται με δέντρο συγκρίσεων (ή αποφάσεων). Αλγόριθμος δέντρο συγκρίσεων. είσοδο: αλγ. ακολουθεί μοναδικό μονοπάτι από ρίζα σε φύλλο. Ναι x x Όχι Ταξινόμηση με εισαγωγή x x x x Ναι Όχι Ναι Όχι x, x, x x x x, x, x x x Ναι Όχι Ναι Όχι x, x, x x, x, x x, x, x x, x, x Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας

Δέντρο Συγκρίσεων Ύψος δέντρου καθορίζει #συγκρίσεων (χ.π.) και αποτελεί κάτω φράγμα στο χρόνο εκτέλεσης. Ταξινόμηση n στοιχείων: τουλάχιστον n! φύλλα (όλες οι μεταθέσεις). Δυαδικό δέντρο. x x Ναι x x Όχι x x Ναι Όχι Ναι Όχι x, x, x x x x, x, x x x Ναι Όχι Ναι Όχι x, x, x x, x, x x, x, x x, x, x Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας

Δέντρο Συγκρίσεων Δυαδικό δέντρο ύψους h έχει h φύλλα. Χρόνος εκτέλεσης = Ω(h). Ταξινόμηση n στοιχείων: h n! Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας

Εναλλακτική απόδειξη Επιχείρημα αντιπάλου (adversary argument). Σωστή ταξινόμηση: μία από n! δυνατές μεταθέσεις Σε κάθε σύγκριση x i < x j? σύνολο δυνατών μεταθέσεων χωρίζεται σε δύο υποσύνολα, αλγόριθμος συνεχίζει με το ένα. Ο αντίπαλος επιλέγει μεγαλύτερο από τα δύο. Θέτει κατάλληλα x i, x j ώστε αλγόριθμος συνεχίζει με το μεγαλύτερο. Μέγεθος υποσυνόλου: n! / k μετά από k-οστή σύγκριση. Ελάχιστο πλήθος συγκρίσεων: h τ.ώ. n! / h h = Ω(n logn) Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας

Συνοψίζοντας (Δυαδικός) σωρός: αποδοτική υλοποίηση ουράς προτεραιότητας με δυαδικό δέντρο. Ιδιότητα σωρού: προτεραιότητα γονέα μεγαλύτερη από προτεραιότητα παιδιών. Εύκολη υλοποίηση με πίνακα. Πολλές εφαρμογές: δρομολόγηση, Prim, Dijkstra, Χρήση σε ταξινόμηση Heapsort: πολυπλοκότητα Θ(n log n). Βέλτιστη πολυπλοκότητα μεταξύ συγκριτικών αλγορίθμων: απόδειξη με δέντρο αποφάσεων ή επιχείρημα αντιπάλου. Αλγόριθμοι & Πολυπλοκότητα (0-8) Ουρές Προτεραιότητας