Lab 6: AVL Trees 29/10/20101ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι
29/10/2010 AVL ( G.M. Adelson-Velskii, E.M. Landis) δέντρο: Είναι Δυαδικό Δέντρο Αναζήτησης Τα υποδέντρα ενός οποιουδήποτε κόμβου έχουν ύψος το οποίο διαφέρει το πολύ κατά ένα Χρόνοι: Εισαγωγή Διαγραφή Αναζήτηση 2ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι
29/10/ ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι
29/10/20104ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι
29/10/2010 Εισαγωγή 72: Εισαγωγή 26: Εισαγωγή 9: ΑΝΙΣΟΖΥΓΙΑ ΠΕΡΙΣΤΡΟΦΗ Εισαγωγή των στοιχείων {72, 26, 9} 5ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι
29/10/2010 Πριν την εισαγωγή: τα δένδρα R, S, T έχουν το ίδιο ύψος, h. Μετά την εισαγωγή: έστω ότι ο κόμβος εισάγεται στο δένδρο R με αποτέλεσμα το ύψος του να γίνει h+1. Η αριστερή περιστροφή υλοποιεί το εξής: A περιστροφή Α Β C R S T h h h h+1 B A C R S T h h 6ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι
Αριστερή περιστροφή του (A,B) σημαίνει 1. Α.left = Β.right 2. Β.right = Α 3. Α.height = C.height+1 4. Β.height = C.height + 2 Πριν την περιστροφή ο Α ήταν ο πατέρας του Β, και μετά, ο Β είναι ο πατέρας του Α. Το δένδρο παραμένει δυαδικό δένδρο αναζήτησης: Κάθε τιμή του Υ είναι μικρότερη από την τιμή του u, η τιμή του u είναι μεγαλύτερη από την τιμή του v. Μετά την περιστροφή το δένδρο είναι AVL: Α.height = h + 1 = ύψος του R. 29/10/20107ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι
29/10/ ΑΝΙΣΟΖΥΓΙΑ Α-ΠΕΡΙΣΤΡΟΦΗ 8ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι
29/10/2010 Συμμετρική ως προς την αριστερή περιστροφή. Πριν την εισαγωγή: τα δένδρα R, S, T έχουν το ίδιο ύψος, h. Μετά την εισαγωγή: έστω ότι ο κόμβος εισάγεται στο δένδρο Τ με αποτέλεσμα το ύψος του Τ να γίνει h+1. Α Β C R S T C A R S T B Δ περιστροφή h h h h+1 9ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι
29/10/2010 Δεξιά περιστροφή του (A,C) σημαίνει 1. Α.right = C.left 2. C.left = Α 3. Α.height = B.height+1 4. C.height = B.height + 2 Πριν την περιστροφή ο Α ήταν ο πατέρας του C, και μετά, ο C είναι ο πατέρας του Α. Το δένδρο παραμένει δυαδικό δένδρο αναζήτησης. 10ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι
29/10/2010 Τα δένδρα Χ και W έχουν ύψος h. Μετά από κάποια εισαγωγή, το w έχει ύψος h+1, προκαλώντας ανισοζυγία στο u. u v w X Y Z W w v u XY ZW AΔ περιστροφή hh hh+1 11ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι
29/10/2010 Με την εισαγωγή των στοιχείων 72, 26, 9, 2, 21, 25 σε ένα ΑVL-δένδρο, δημιουργείται ανισοζυγία στον κόμβο 26. Με εφαρμογή ΑΔ περιστροφής έχουμε: ΑΝΙΣΟΖΥΓΙΑ ΑΔ ΠΕΡΙΣΤΡΟΦΗ 12ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι
29/10/2010 Τα δένδρα Χ και W έχουν ύψος h. Μετά από κάποια εισαγωγή, το w έχει ύψος h+1, προκαλώντας ανισοζυγία στο u. u v w X Y Z W w u v XY ZW ΔΑ περιστροφή h h hh+1 13ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι
29/10/ ΑΝΙΣΟΖΥΓΙΑ ΔΑ ΠΕΡΙΣΤΡΟΦΗ 14ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι
29/10/2010 ΑΔ περιστροφή του (u,v,w) υλοποιείται ως εξής: 1. v.right = w.left, 2. u.left = w.right, 3. w.left = v, 4. w.right = u, 5. v.height, u.height, w.height = … ΔΑ περιστροφή του (u,v,w) υλοποιείται ως εξής: 1. v.left = w.right, 2. u.right = w.left, 3. w.left = u, 4. w.right = v, και 5. v.height, u.height, w.height = …. H περιστροφές δεν παραβιάζουν τη ΔΔΑ συνθήκη. Το δένδρο που δημιουργείται είναι AVL-δένδρο (οι κόμβοι v και u έχουν ύψος h+1). 15ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι
29/10/2010 Στην θεωρία είναι εύκολο. Βλέπουμε τις κατευθύνσεις που ακολουθήσαμε για να εισάξουμε τον κόμβο Ανάλογα με τις κατευθύνσεις, επιλέγουμε το είδος της περιστροφής. Τι γίνεται τώρα που πρέπει να γράψουμε κώδικα? 16ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι
1. Εισάγουμε το στοιχείο στο κατάλληλο φύλλο όπως ακριβώς σε ένα δυαδικό δένδρο αναζήτησης. Καταγράφουμε τη διαδρομή που ακολουθήσαμε, δηλαδή αν r είναι η ρίζα και u είναι το φύλλο που προσθέσαμε τότε παίρνουμε διαδρομή με μορφή: 2. Ακολουθούμε τη διαδρομή προς τα πίσω και δίνουμε στα πεδία height των κόμβων τις νέες τους τιμές. 3. Αν σε κάποιο σημείο αυτό προκαλέσει ανισοζυγία, και μόλις συμβεί αυτό, (δηλ. αν έχει σαν αποτέλεσμα κάποιοι κόμβοι να έχουν παιδιά που το ύψος τους διαφέρει κατά τιμή >1), τότε εφαρμόζουμε στον κόμβο αυτό, έστω v i, την κατάλληλη περιστροφή. Επιλέγουμε την περιστροφή ως εξής: 29/10/2010ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι17
αν ο v i-1 είναι αριστερό παιδί του v i και ο v i-2 αριστερό παιδί του v i-1 τότε εφαρμόζουμε την A-περιστροφή, αν ο v i-1 είναι δεξιό παιδί του v i και ο v i-2 δεξιό παιδί του v i-1 τότε εφαρμόζουμε τη Δ- περιστροφή, αν ο v i-1 είναι αριστερό παιδί του v i και ο v i-2 δεξιό παιδί του v i-1 τότε εφαρμόζουμε την AΔ- περιστροφή, αν ο v i-1 είναι δεξιό παιδί του v i και ο v i-2 αριστερό παιδί του v i-1 τότε εφαρμόζουμε τη ΔA-περιστροφή. 29/10/2010ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι18
Περιστροφή αριστερά: Κάναμε εισαγωγή αριστερά δύο φορές Αριστερή Περιστροφή singleRotationLeft() Κάναμε εισαγωγή αριστερά και μετά δεξία ΑΔ περιστροφή doubleRotationLeftRight() Περιστροφή δεξιά: Κάναμε εισαγωγή δεξιά δύο φορές Δεξιά Περιστροφή singleRotationRight() Κάναμε εισαγωγή δεξιά και μετά αριστερά ΔΑ περιστροφή doubleRotationRightLeft() 29/10/201019ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι
Βρίσκονται στα αρχεία AVLTree.h AVLTree.cpp Συμπληρώστε την: insertNode() Υλοποίηστε: singleRotationLeft() singleRotationRight() doubleRotationLeftRight() doubleRotationRightLeft() 29/10/201020ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι
29/10/201021ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι