Ουρές προτεραιότητας Πελάτες... στο ταµείο µιας τράπεζας Κάθε πελάτης µε ένα νούµερο/αριθµός προτεραιότητας! Όσοοαριθµός είναι µεγάλος, τόσο οι πελάτες είναι πιο ενδιαφέροντες(!) ένα µόνο ταµείο ανοικτό επεξεργασία γρήγορη
«ο υπάλληλος της τράπεζας πρέπει να ξέρει να κάνει γρήγορα τις 3 ακόλουθες διαδικασίες»: Αναζήτηση του µέγιστου στην ουρά προτεραιότητας ιαγραφή αυτού του στοιχείου από την ουρά Εισαγωγή ενός νέου στοιχείου στην ουρά
Λύσεις () Ένας πίνακας και ταξινοµηση κατά αύξουσα σειρά προτεραιοτήτων. Αναζήτηση του µέγιστου ιαγραφή Αλλά εισαγωγή ; Ο(n), n το µήκος της ουράς (άσκηση)
Λύσεις () ιαχείριση µιας απλής ουράς, και αναζήτηση του µέγιστου κάθε φορά. Εισαγωγή: γρήγορη Αναζήτηση µέγιστου: O(n) ιαγραφή; (άσκηση)
Λύση Μια κοµψή µέθοδος Να διαχειρισθεί µια δοµή µερικής διάταξης µε τη βοήθεια ενός δένδρου (δοµή σωρού (heap)). Η ουρά n στοιχείων παριστάνεται από ένα δυαδικό δένδρο περιέχον σε κάθε κόµβο ένα στοιχείο
6 4 8 9 3 4 7 Το δένδρο πληρεί δύο βασικές ιδιότητες: - Τιµή κάθε κόµβου τιµής παιδιών - Το δέντρο είναι σχεδόν πλήρες
υαδικό έντρο Σχεδόν πλήρες Τα επίπεδα, εκτός ίσως από το τελευταίο, περιέχουν το µέγιστο αριθµό κόµβων ( i ) φύλλα τελευταίου επιπέδου όλα αριστερά φύλλα όλα στο τελευταίο - προτελευταίο επίπεδο Εσωτερικοί κόµβοι δυαδικοί (εκτός από το δεξιότερο του προτελευταίου επιπέδου)
Παράδειγµα: 6 0 4 3 4 8 5 6 7 9 3 8 9 4 7
Αρίθµηση Κατά πλάτος Κάθε κόµβος έχει τον πατέρα του στη θέση i/ Το αριστερό παιδί του κόµβου i, είναι ο κόµβος i Το δεξιό παιδί του κόµβου i i+
Υλοποίηση µε πίνακα ενός σωρού Αρίθµηση κατά πλάτος «το νούµερο κάθε κόµβου του δένδρου δίνει τον δείκτη του πίνακα που περιέχει την τιµή του κόµβου» i n a[i] a[i] 3 i + n a[i +] a[i]
Παρ. : i 3 4 5 6 7 8 9 a[i] 6 4 8 9 3 4 7 6 θέση 7: 4 *3+ 8 9 3 4 7
Εισαγωγή ενός νέου στοιχείου στο σωρό Αλγόριθµος - Αύξησε n - Θέσε a[n]= u (u : νέο στοιχείο), i = n i - Αν η συνθήκη a u δεν ικανοποιείται ΤΟΤΕ αντιµετάθεσε την τιµήτουκόµβου i µεαυτή του πατέρα του πήγαινε στον πατέρα i= i div και επανέλαβε µέχρι ότου η συνθήκη του σωρού ικανοποιείται
Παραδειγµα **** 6 6 4 4 8 9 3 8 9 3 4 7 4 7 5 8 6 4 5 4 7 9 3 8 6 5 4 4 7 9 3
ιαγραφή ενός στοιχείου Η διαδικασία διαγραφής του ου στοιχείου της ουράς αφαιρεί τη ρίζα του δέντρου που παριστάνει την ουρά, δίδοντας δυο δένδρα.
ιαγραφή ενός στοιχείου Αλγόριθµος. Θέσε το δεξιότερο στοιχείο της τελευταίας γραµµής στη θέση της ρίζας. σύγκρινε την τιµή του µε αυτή των παιδιών της 3. αντιµετάθεσε αυτή την τιµή µε την τιµή του νικητή (µέγιστη τιµή των παιδιών) 4. επανέλαβε τη διαδικασία µέχρι ότου να ικανοποιείται η συνθήκη του σωρού.
Παράδειγµα:**** 6 5 5 8 4 9 3 8 4 9 3 4 7 4 7 8 5 4 4 7 9 3 8 5 4 4 7 9 3
Πολυπλοκότητα Η αναπαράσταση των ουρών προτεραιότητας µε σωρό επιτρέπει να κάνουµε τις 3 διαδικασίες: Αναζήτηση (µέγιστου στοιχείου) Εισαγωγή (ενός στοιχείου) ιαγραφή (ενός στοιχείου) σε O(logn)
υαδικό δένδρο n κόµβοι φ φύλλα Απόδειξη: για φ= αληθής υαδικό ένδρο Σχέση πλήθους κόµβων και αριθµού φύλλων ΠΡΟΤΑΣΗ Έστω αληθής για φ < n αριθµος φυλλων = φ n + B ϕ ϕ B n B = 0, B n = n + n, B + n + ϕ ϕ n + ϕ n +
υαδικό ένδρο Σχέση ύψους και αριθµού φύλλων υαδικό δένδρο n κόµβοι ΠΡΟΤΑΣΗ ύψος h φ φύλλα logϕ Απόδειξη: B ϕ B = ϕ B n ϕ 0, B, B n + n+ lgϕ lg + logϕ log + ( n ) ( n ) + logϕ log + + logϕ logn + logϕ log n ύψος h
υαδικό ένδρο (συνέχεια... ( ) ( ) ( ) ( ) n n k n k n k n n n n n k k k k k k log log log log log log + = + + = + + + < + < < < < + = + + + +
Πλήθος κόµβων ενός πλήρους δυαδικού δέντρου ύψους n(άσκηση a n = πλήθος εσωτερικών κόµβων + πλήθος φύλλων = a n- + n, n, a 0 = ύψος n- συνέχεια
Πλήθος κόµβων ενός πλήρους δυαδικού δέντρου ύψους n a n = a n- + n, n >= a n = a n- + n a n- = a n- + n- a n- = a n-3 + n- a = a + a = a 0 + n a n = a 0 +Σ i, i= n a n =+( n+ )/(-) a n = n+ -
ένδρα (υπενθύµιση) Ένα δένδρο είναι είτε ένα ατοµικό δένδρο (ένα φύλλο), είτε ένας κόµβος και µια ακολουθία από δένδρα. Κόµβοι εσωτερικοί φύλλα
n n n 8 n 3 n 7 n 9 n n n 4 n 5 n 6 n : ρίζα n 5, n 6, n 7, n 9, n, n : φύλλα n, n, n 3, n 4, n 5: εσωτερικοί κόµβοι
υαδικά ένδρα (υπενθύµιση) Οι κόµβοι έχουν το πολύ δυο παιδιά Το βάθος, ενός κόµβου είναι το µήκος του µονοπατιού που τον ενώνει µε τηρίζα. ρίζα βάθος "0" τα παιδιά της βάθος "" οι άλλοι κόµβοι βάθος ">"
Παράδειγµα: 6 0 4 3 4 8 5 6 7 9 3 8 9 4 7
υαδικό ένδρο(υπενθύµιση) Υψος ενός κόµβου: αριθµός πλευρών του µακρύτερου µονοπατιού απο τον κόµβο σε ένα φύλλο. Υψος δέντρου: το ύψος της ρίζας υαδικό δένδρο µε m κόµβους και ύψος n Ισχύει m n m log
υαδικό ένδρο (εκφυλισµένο δένδρο εκφυλισµένο µέγιστο ύψος 3 ύψος n m- 4 5 m
υαδικό ένδρο πλήρες (υπενθύµιση) δένδρο πλήρες ελάχιστο ύψος n + ύ ψος n-> m = Έχουµε m < n+ log m < n + και τελικά log m n m
a n Πλήρες δυαδικό δέντρο ύψους n : αριθµός κόµβων, τότε a n = a n- + (n, a 0 =) (= δύο υπό-δέντρα ύψους n- και µια ρίζα) B B n ϕ ϕ a n- a n-
Αριθµός κόµβων πλήρους δυαδικού δέντρου ύψους n a n = a n- +, n >=, a 0 = a n = a n- + (x 0 ) a n- = a n- + (x ) a n- = a n-3 + (x ) a = a + (x n- ) a = a 0 + (x n- ) a n = n a 0 +(++ + n- ) n- a n = n a 0 +Σ i i=0 a n = n +( n )/(-)= n+,n >= 0 (Μέθοδος των αθροιζόµενων παραγόντων)
Ασκηση: Αναζήτηση και εισαγωγή σε υαδικά δέντρα, Πολυπλοκότητα Successor(x) Minimum(T) Maximum(T) Inorder walk Preorder walk Postorderwalk Delete(x)