Ουρές προτεραιότητας Πελάτες φθάνουν στο ταμείο μιας τράπεζας Eνα μόνο ταμείο είναι ανοικτό Κάθε πελάτης παρουσιάζεται με ένα νούμερο - αριθμός προτεραιότητας Όσο ο αριθμός είναι μεγάλος, τόσο οι πελάτες είναι πιο ενδιαφέροντες (!)
Ουρές προτεραιότητας / επεξεργασία γρήγορη «ο υπάλληλος της τράπεζας πρέπει να ξέρει να κάνει αποδοτικά τις 3 ακόλουθες διαδικασίες»: Αναζήτηση του μέγιστου στην ουρά προτεραιότητας Διαγραφή ενός στοιχείου από την ουρά Εισαγωγή ενός νέου στοιχείου στην ουρά
Ουρές προτεραιότητας (Λύση 1) Χρησιμοποίηση ενός πίνακα και ταξινόμηση κατά αύξουσα σειρά προτεραιοτήτων. ρ Ταξινόμηση σε Ο(n logn) Αναζήτηση του μέγιστου σε Ο(1) Διαγραφή σε Ο(1) Η εισαγωγή όμως?? Ο(n), n το μήκος της ουράς (άσκηση)
Ουρές προτεραιότητας (Λύση ) Διαχείριση μιας απλής ουράς, και αναζήτηση του μέγιστου κάθε φορά. Εισαγωγή: γρήγορη Αναζήτηση μέγιστου: O(n) Διαγραφή; (άσκηση)
Ουρές ρςπροτεραιότητας ρ (Λύση η 3) Μια κομψή μέθοδος Να διαχειρισθεί μια δομή μερικής διάταξης με τη βοήθεια ενός δένδρου (δομή σωρού - heap). Η ουρά n στοιχείων παριστάνεται από ένα δυαδικό δένδρο που περιέχει σε κάθε κόμβο του ένα στοιχείο
Δυαδικό Δένδρο (υπενθύμιση) Οι κόμβοι έχουν το πολύ δύο παιδιά
Δυαδικό Δένδρο πλήρες (υπενθύμιση) Όλοι οι εσωτερικοί κόμβοι έχουν δύο παιδιά
Δυαδικό όδέντρο Σχεδόν πλήρες Κάθε επίπεδο i, εκτός ίσως από το τελευταίο, περιέχει το μέγιστο αριθμό κόμβων ( i ) Τα φύλλα του τελευταίου επιπέδου είναι όλα αριστερά Όλα τα φύλλα είναι στο τελευταίο ή το προτελευταίο επίπεδο Οι εσωτερικοί κόμβοι είναι δυαδικοί (εκτός από τον δεξιότερο του προτελευταίου επιπέδου)
Δυαδικό όδέντρο Σχεδόν πλήρες / Παράδειγμα 0 1
Δυαδικό Δέντρο Σχεδόν πλήρες / Παραδείγματα ΝΑΙ ΝΑΙ ΟΧΙ
Σωρός (Heap) )/Π Παράδειγμα 16 0 14 10 1 8 10 9 3 4 7 Το δένδρο πληρεί δύο βασικές ιδιότητες: - Τιμή κάθε κόμβου τιμής παιδιών δώ - Το δέντρο είναι σχεδόν πλήρες
Δυαδικό Δέντρο Σχεδόν πλήρες / Αρίθμηση Κατά πλάτος 1 16 0 3 14 10 1 4 5 6 7 8 10 9 3 8 9 10 4 7
Δυαδικό Δέντρο Σχεδόν πλήρες / Αρίθμηση Κατά πλάτος Κάθε κόμβος έχει τον πατέρα του στη θέση i/ Το αριστερό παιδί του κόμβου i, είναι ο κόμβος i Το δεξιό παιδί του κόμβου i i+1
Υλοποίηση με πίνακα ενός σωρού Αρίθμηση κατά πλάτος «το νούμερο κάθε κόμβου του δένδρου δίνει τον δείκτη του πίνακα που περιέχει την τιμή του κόμβου» i n a[i] a[i] 3 i + 1 n a[i +1] a[i]
Υλοποίηση ενός σωρού με πίνακα / Παράδειγμα i 1 3 4 5 6 7 8 9 10 a[i] 16 14 10 8 10 9 3 4 7 16 14 10 θέση 7: *3+1 8 10 9 3 4 7
Εισαγωγή ενός νέου στοιχείου στο σωρό Αλγόριθμος - Αύξησε n - Θέσε a[n]= u (u : το νέο στοιχείο), i = n - Όσο ισχύει i a < u ΤΟΤΕ αντιμετάθεσε την τιμή του κόμβου i με αυτή του πατέρα του πήγαινε στον πατέρα i= i div και επανέλαβε μέχρις μχρςότου η συνθήκη σωρού να ικανοποιείται
Εισαγωγή ενός νέου στοιχείου στο σωρό / παράδειγμα 8 16 16 14 10 14 10 10 9 3 8 10 9 3 4 7 4 7 15 8 16 14 15 4 7 10 9 10 3 **** 8 16 15 14 4 7 10 9 10 3
Διαγραφή της ρίζας από το σωρό Η διαδικασία δ διαγραφής του 1ου στοιχείου της ουράς αφαιρεί τη ρίζα του δέντρου που παριστάνει την ουρά, δίδοντας δύο δένδρα. δ
Διαγραφή της ρίζας από το σωρό 16 15 10 8 14 9 3 4 7 10
Αλγόριθμος διαγραφής της ρίζας 1. Θέσε το δεξιότερο στοιχείο της τελευταίας γραμμής στη θέση της ρίζας. σύγκρινε την τιμή του με αυτή των παιδιών της 3. αντιμετάθεσε αυτή την τιμή με την τιμή του νικητή (μέγιστη τιμή των παιδιών) 4. επανέλαβε τη διαδικασία δ μέχρι ότου να ικανοποιείται η συνθήκη του σωρού.
Διαγραφή της ρίζας από το σωρό / Παράδειγμα 16 10 15 10 15 10 8 14 9 3 8 14 9 3 4 7 10 4 7 8 15 10 14 4 7 9 10 3 **** 8 4 14 7 10 15 9 10 3
Πολυπλοκότητα Η διαχείριση των ουρών προτεραιότητας με σωρό επιτρέπει να κάνουμε τις 3 διαδικασίες: Αναζήτηση (μέγιστου στοιχείου) Εισαγωγή (ενός στοιχείου) Διαγραφή (ενός στοιχείου) σε O(logn)
Δυαδικά Δένδρα Βάθος και ύψος των κόμβων (υπενθύμιση) Το βάθος, ενός κόμβου είναι το μήκος του μονοπατιού που τον ενώνει με τη ρίζα. ρίζα βάθος "0" τα παιδιά της βάθος "1" οι άλλοι κόμβοι βάθος ">1"
Βάθος κόμβου σε ένα δυαδικό δ όδέ δέντρο / Παράδειγμα 16 0 14 10 1 8 10 9 3 4 7
Δυαδικά Δένδρα Βάθος και ύψος των κόμβων (υπενθύμιση) Υψος ενός κόμβου: αριθμός πλευρών του μακρύτερου μονοπατιού απο τον κόμβο σε ένα φύλλο. Υψος δέντρου: το ύψος της ρίζας 16 0 14 10 1 8 10 9 3 4 7
Δυαδικά Δένδρα ύψος Σε ένα δυαδικό δένδρο με m κόμβους για το ύψος n ισχύει: log m n m 1
Δυαδικό Δένδρο (εκφυλισμένο) δένδρο εκφυλισμένο μέγιστο ύψος 1 3 ύψος n m-1 4 5 m
Δυαδικό Δένδρο πλήρες (υπενθύμιση) δένδρο πλήρες ελάχιστο ύψος n + 1 ύ ψος n-> m = 1 n+ 1 Έχουμε m < log m < n + 1 και τελικά log m n m 1
Δυαδικό όδέντρο Σχεδόν πλήρες / ύψος 1 16 0 3 14 10 1 4 5 6 7 8 10 9 3 8 9 10 4 7 Ύψος = O(logn)
Δυαδικό Δένδρο Σχέση πλήθους κόμβων και αριθμού φύλλων Δυαδικό όδένδροδ ΠΡΟΤΑΣΗ Απόδειξη: n κόμβοι φ φύλλα για φ=1 1 αληθής αριθμος φυλλων = φ n + 1 Έστω αληθής για φ < n n 1 B 1 ϕ 1 ϕ B n B = 0, B n = n 1 1 + n, B + 1 n1 + 1 ϕ1 1 + n ϕ ϕ n + 1
Δυαδικό όδένδροδ n κόμβοι Δυαδικό Δένδρο Σχέση ύψους και αριθμού φύλλων ΠΡΟΤΑΣΗ ύψος h φ φύλλα logϕ n 1 Απόδειξη: B= 0 B 1 ϕ 1 0, B, B 1 n + 1 n+ 1 ϕ lgϕ lg B ( ) 1+ logϕ log n+ 1 1 logϕ log( n 1) ϕ n + + 1+ logϕ logn + 1 log ϕ log n ύψος h
Δυαδικό Δένδρο Σχέση ύψους και αριθμού φύλλω ( + 1) log n = 1+ log n k k k < n < < k < log n < n + 1 k + 1 k + 1 1 k + 1 ( n + 1) k + 1 ( n + 1 ) log n = k + 1 log( n + 1) = 1+ log n
Πλήθος κόμβων ενός πλήρους δυαδικού δέντρου ύψους n (άσκηση) a n = πλήθος εσωτερικών κόμβων + πλήθος φύλλων = a n =1 n-1 +, n 1, a 0 ύψος n-1 συνέχεια
Πλήθος κόμβων ενός πλήρους δυαδικού δέντρου ύψους n a n = a n-1 + n, n >= 1 a n = a n-1 + n a n-1 n-1 = a n- + a n- = a n-3 + n- a = a 1 + a 1 = a 0 + 1 n a n = a 0 +Σ i, n 1 i=1 a n =1+( n+1 )/(-1) a = n+1 n - 1
Πλήρες δυαδικό δέντρο ύψους n a ρ μ ς μβ, n n n-1 : αριθμός κόμβων, τότε a n = a n 1 + 1 (n 1, a 0 =1) (= δύο υπό-δέντρα ύψους n-1 και μια ρίζα) B 1 B n ϕ 1 ϕ a n-1 a n-1
Αριθμός κόμβων πλήρους δυαδικού δέντρου ύψους n a n = a n-1 +1, n >= 1, a 0 =1 a n = a n-1 +1 (x 0 ) a n-1 = a n- +1 (x 1 ) a n- = a n-3 +1 (x ) a n- = a 1 +1 (x ) a 1 = a 0 +1 (x n-1 ) a n = n a 0 +(1++ + n-1 ) n-1 Σ a n = n a 0 +Σ i i=0 a n = n +( n 1)/(-1)= n+1 1,n >= 0 (Μέθοδος των αθροιζόμενων παραγόντων)