Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 9. Κόκκινα-Μαύρα Δέντρα 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 9/12/2016
Δέντρα, Δέντρα Παντού... Αναζήτηση Εισαγωγή ιαγραφή ιάσχιση Α 1 O(n) O(n) O(n) O(n) AVL O(logn) O(logn) O(logn) O(n) Σωρός 2 ΟΧΙ O(logn) O(logn) ΟΧΙ 1. αναμενόμενοι χρόνοι O(logn) για τυχαία και ομοιόμορφα επιλεγμένα Α 2. Για σωρό: διαγραφή=απομάκρυνση μέγιστου ή ελάχιστου Δομές Δεδομένων, 3ο Εξάμηνο 2
Εισαγωγή Τα κόκκινα-μαύρα δέντρα (red-black trees) είναι ισοζυγισμένα δέντρα δυαδικής αναζήτησης με τα εξής χαρακτηριστικά Οι κόμβοι είναι έγχρωμοι Ένας κόμβος μπορεί να είναι μαύρος ή κόκκινος Κατά την εισαγωγή και διαγραφή ακολουθούνται κανόνες που διατηρούν τις διάφορες διευθετήσεις αυτών των χρωμάτων Ο αριθμός των μαύρων κόμβων σε ένα μονοπάτι από τη ρίζα στο φύλλο ονομάζεται μαύρο ύψος Δομές Δεδομένων, 3ο Εξάμηνο 3
Κανόνες Κόκκινων-Μαύρων Δέντρων Κατά την εισαγωγή ή τη διαγραφή κόμβων πρέπει να ακολουθούνται οι εξής κανόνες Κάθε κόμβος είναι κόκκινος ή μαύρος (κανόνας 1) Η ρίζα είναι πάντα μαύρη (κανόνας 2) Αν ένας κόμβος είναι κόκκινος, πρέπει τα παιδιά του να είναι μαύρα (το αντίστροφο δεν ισχύει απαραίτητα) (κανόνας 3) Κάθε μονοπάτι από τη ρίζα ως ένα φύλλο ή ένα παιδί null, πρέπει να περιέχει τον ίδιο αριθμό μαύρων κόμβων (κανόνας 4) (ισοδύναμα: το μαύρο ύψος πρέπει να είναι το ίδιο για όλα τα μονοπάτια από τη ρίζα σε ένα φύλλο) Οι κανόνες αυτοί οδηγούν πάντα σε ισοζυγισμένο δέντρο (ισοδύναμα: ένα ορθό κόκκινο-μαύρο δέντρο είναι πάντα ισοζυγισμένο) Δομές Δεδομένων, 3ο Εξάμηνο 4
Διόρθωση Παραβιάσεων των Κανόνων Υπάρχουν δύο και μόνο δύο ενέργειες που είναι επιτρεπτές Μπορούμε να αλλάξουμε τα χρώματα των κόμβων Μπορούμε να εκετελέσουμε περιστροφές Δομές Δεδομένων, 3ο Εξάμηνο 5
Εισαγωγή Κόμβων Η ρίζα είναι πάντα μαύρη Όταν εισάγεται κάποιος άλλος κόμβος, αυτός είναι κόκκινος Ο λόγος είναι ότι η εισαγωγή κόκκινου κόμβου είναι λιγότερο πιθανό να παραβιάσει τους κανόνες κόκκινου-μαύρου από ότι η εισαγωγή μαύρου Αν ο κόκκινος κόμβος επισυνάπτεται σε ένα μαύρο, τότε κανένας κανόνας δεν παραβιάζεται εν υπάρχουν δύο κόκκινοι κόμβοι μαζί εν αλλάζει το μαύρο ύψος Δομές Δεδομένων, 3ο Εξάμηνο 6
Απλά Παραδείγματα: Αναστροφή Χρωμάτων 25 75 Αναστροφή χρωμάτων απαιτείται όταν κατά τη διαδικασία εισαγωγής βρεθεί μαύρος κόμβος με δύο κόκκινα παιδιά 12 25 75 Δομές Δεδομένων, 3ο Εξάμηνο 7
Απλά Παραδείγματα: Ένα μη Ισοζυγισμένο Δέντρο 25 75 12 6 Το πρόβλημα μπορεί να λυθεί με περιστροφή και αναστροφές χρωμάτων Δομές Δεδομένων, 3ο Εξάμηνο 8
Ανασκόπηση Διαδικασίας Εισαγωγής (1) Τρία βήματα 1. Αναστροφές χρωμάτων προς τα κάτω 2. Περιστροφές μετά την εισαγωγή κόμβου 3. Περιστροφές προς τα κάτω (πριν την εισαγωγή) Συμβολισμοί Έστω Χ ένας συγκεκριμένος κόμβος (που έχει προκαλέσει παραβίαση κανόνα) Το P είναι ο γονέας του Χ Το G είναι ο παππούς του Χ (ο γονέας του P) Δομές Δεδομένων, 3ο Εξάμηνο 9
Ανασκόπηση Διαδικασίας Εισαγωγής (2) Κατεβαίνουμε το δέντρο για να βρεθεί το σημείο εισαγωγής Αν βρεθεί μαύρος κόμβος με δύο κόκκινα παιδιά Αναστροφή χρωμάτων Αν η αναστροφή προκαλέσει σύγκρουση κόκκινο-κόκκινο (παραβίαση κανόνα 3) Έστω Χ το κόκκινο παιδί και P ο κόκκινος γονέας Η σύγκρουση επιλύεται με Απλή περιστροφή, εάν ο Χ είναι εξωτερικό εγγόνι του G ιπλή περιστροφή, εάν ο Χ είναι εσωτερικό εγγόνι του G Όταν βρεθεί το σημείο εισαγωγής, εισάγεται ο κόμβος Δομές Δεδομένων, 3ο Εξάμηνο 10
Εξωτερικό εγγόνι (Αριστερό παιδί) G Εσωτερικό εγγόνι ( εξιό παιδί) G P P X X G Εσωτερικό εγγόνι (Αριστερό παιδί) G Εξωτερικό εγγόνι ( εξιό παιδί) P P X X Δομές Δεδομένων, 3ο Εξάμηνο 11
Ανασκόπηση Διαδικασίας Εισαγωγής (3) Αφού εισαχθεί ο νέος κόμβος Χ Αν ο P είναι μαύρος, όλα καλά Αν ο P είναι κόκκινος Αν ο Χ είναι εσωτερικό εγγόνι του G Εκτελούμε δύο αλλαγές χρωμάτων Εκτελούμε δύο περιστροφές Αν ο Χ είναι εξωτερικό εγγόνι του G Εκτελούμε δύο αλλαγές χρωμάτων Εκτελούμε μία περιστροφή Δομές Δεδομένων, 3ο Εξάμηνο 12
1. Αναστροφές χρωμάτων προς τα κάτω Κατά την εισαγωγή κόμβου Όταν εντοπίζεται μαύρος κόμβος με δύο κόκκινα παιδιά, εκτελούμε αναστροφή χρωμάτων Εάν η αναστροφή προκαλέσει σύγκρουση κόκκινου-κόκκινου (κανόνας 3), αυτό λύνεται είτε με μια απλή περιστροφή ή με μια διπλή περιστροφή Τα μαύρα ύψη παραμένουν αναλλοίωτα (κανόνας 4) P P X1 X2 X1 X2 Δομές Δεδομένων, 3ο Εξάμηνο 13
2. Περιστροφές μετά την εισαγωγή κόμβου Αφού εισαχθή ο κόμβος X(που είναι πάντα κόκκινος) έχουμε τρεις δυνατές περιπτώσεις Ο P είναι μαύρος Ο P είναι κόκκινος και ο Χ εξωτερικό εγγόνι του G Ο P είναι κόκκινος και ο Χ εσωτερικό εγγόνι του G Αν ο P είναι μαύρος, τότε δεν υπάρχει καμία σύγκρουση έχει ολοκληρωθεί η εισαγωγή Δομές Δεδομένων, 3ο Εξάμηνο 14
Ο P είναι κόκκινος και ο Χ εξωτερικός G P 25 75 P 12 75 X 12 Αλλαγή χρώματος Αλλαγή χρώματος 6 25 6 Αλλαγή χρώματος του παππού (G) Αλλαγή χρώματος του γονέα (P) Περιστροφή με τον παππού (G) στην κορυφή προς την κατεύθυνση που ανυψώνει το Χ Δομές Δεδομένων, 3ο Εξάμηνο 15
Ο P είναι κόκκινος και ο Χ εσωτερικός G P 25 75 25 75 18 75 12 X Αλλαγή χρώματος 18 12 25 18 Αλλαγή χρώματος 12 Αλλαγή χρώματος του παππού (G) Αλλαγή χρώματος του Χ Περιστροφή με το γονέα P του X στην κορυφή προς την κατεύθυνση που ανυψώνει το Χ Περιστροφή με τον παππού (G) του X στην κορυφή προς την κατεύθυνση που ανυψώνει το Χ Δομές Δεδομένων, 3ο Εξάμηνο 16
3. Περιστροφές προς τα κάτω Όπως κινούμαστε προς τα κάτω (πριν γίνει η εισαγωγή) και κάνουμε αναστροφές χρωμάτων, είναι πιθανό να προκαλέσουμε παραβίαση του κανόνα 3 (γονέας και παιδί να είναι κόκκινοι) ύο περιπτώσεις Ο παραβάτης κόμβος είναι εξωτερικό εγγόνι Ο παραβάτης κόμβος είναι εσωτερικό εγγόνι Παραβάτης κόμβος λέγεται το παιδί στο ζεύγος γονέας-παιδί που προκαλεί τη σύγκρουση κόκκινο-κόκκινο Δομές Δεδομένων, 3ο Εξάμηνο 17
Ο παραβάτης κόμβος είναι εξωτερικό εγγόνι (1/2) 25 75 12 37 6 18 3 Στο παραπάνω δέντρο, που έχει προκύψει από την εισαγωγή των:, 25, 75, 12, 37, 6, 18 Θέλουμε να εισάγουμε το 3 Θα προκαλέσει αναστροφή χρωμάτων μεταξύ του 12 και των παιδιών του (6 και 18) Δομές Δεδομένων, 3ο Εξάμηνο 18
Ο παραβάτης κόμβος είναι εξωτερικό εγγόνι (2/2) P G 25 75 Αλλαγή χρώματος 25 12 X 12 37 Αλλαγή χρώματος 6 18 37 75 6 18 3 Αναστροφή χρωμάτων στους κόμβους 12 και Αλλαγή χρώματος του παππού (G) Αλλαγή χρώματος του γονέα (P) Περιστροφή με τον παππού (G) στην κορυφή προς την κατεύθυνση που ανυψώνει το Χ Δομές Δεδομένων, 3ο Εξάμηνο 19
Ο παραβάτης κομβος είναι εσωτερικό εγγόνι (1/2) 25 75 12 37 31 43 28 Στο παραπάνω δέντρο, που έχει προκύψει από την εισαγωγή των:, 25, 75, 12, 37, 31, 43 Θέλουμε να εισάγουμε το 28 Θα προκαλέσει αναστροφή χρωμάτων μεταξύ του 37 και των παιδιών του (31 και 43) Δομές Δεδομένων, 3ο Εξάμηνο 20
P Ο παραβάτης κομβος είναι εσωτερικό εγγόνι (2/2) G 25 75 X Αλλαγή χρώματος 37 75 37 25 12 37 Αλλαγή χρώματος 25 43 12 31 43 75 31 43 12 31 28 Αλλαγή χρώματος του παππού (G) Αλλαγή χρώματος του Χ Περιστροφή με το γονέα P του X στην κορυφή προς την κατεύθυνση που ανυψώνει το Χ Περιστροφή με τον παππού (G) του X στην κορυφή προς την κατεύθυνση που ανυψώνει το Χ Δομές Δεδομένων, 3ο Εξάμηνο 21
Απόδοση Κόκκινων-Μαύρων Δέντρων Αναζήτηση, εισαγωγή και διαγραφή σε O(logN) Μπορεί να αποδειχθεί ότι η αναζήτηση δε χρειάζεται παραπάνω από 2*logN συγκρίσεις Οι χρόνοι εισαγωγής και διαγραφής αυξάνονται κατά ένα σταθερό τελεστή, λόγω των αναστροφών χρωμάτων και των περιστροφών Κατά μέσο όρο μια εισαγωγή απαιτεί περίπου μία περιστροφή Άρα εξακολουθεί να γίνεται σε O(logN) αλλά είναι πιο αργή από την εισαγωγή σε ένα απλό δυαδικό δέντρο Επειδή συνήθως χρησιμοποιούμε περισσότερες αναζητήσεις από εισαγωγές και διαγραφές, δεν προκύπτει σημαντική επιβάρυνση από τη χρήση κόκκινων-μαύρων δέντρων, και αποφεύγουμε τις αργές ταχύτητες O(N) Δομές Δεδομένων, 3ο Εξάμηνο 22