EPL231 – Data Structures and Algorithms Lab 6: AVL Trees EPL231 – Data Structures and Algorithms
AVL Δέντρα AVL δέντρο: Χρόνοι: Είναι Δυαδικό Δέντρο Αναζήτησης Τα υποδέντρα ενός οποιουδήποτε κόμβου έχουν ύψος το οποίο διαφέρει το πολύ κατά ένα Χρόνοι: Εισαγωγή Διαγραφή Αναζήτηση 4/12/2017
Παραδείγματα AVL Δέντρων 2 2 1 3 4 2 3 4 2 1 2 1 3 4/12/2017
Παραδείγματα Εκτέλεσης 4/12/2017
Παράδειγμα Εισαγωγή των στοιχείων {72, 26, 9} Εισαγωγή 72: ΠΕΡΙΣΤΡΟΦΗ Εισαγωγή 26: 72 ΑΝΙΣΟΖΥΓΙΑ Εισαγωγή 9: 26 9 4/12/2017
Αριστερή Περιστροφή Πριν την εισαγωγή: τα δένδρα R, S, T έχουν το ίδιο ύψος, h. Μετά την εισαγωγή: έστω ότι ο κόμβος εισάγεται στο δένδρο R με αποτέλεσμα το ύψος του να γίνει h+1. Η αριστερή περιστροφή υλοποιεί το εξής: Α B A περιστροφή Β C A h+1 h C h+1 h T h R h h R S S T 4/12/2017
Διαδικασία Α-περιστροφής Αριστερή περιστροφή του (A,B) σημαίνει Α.left = Β.right Β.right = Α Α.height = C.height+1 Β.height = C.height + 2 Πριν την περιστροφή ο Α ήταν ο πατέρας του Β, και μετά, ο Β είναι ο πατέρας του Α. Το δένδρο παραμένει δυαδικό δένδρο αναζήτησης: Κάθε τιμή του Υ είναι μικρότερη από την τιμή του u, η τιμή του u είναι μεγαλύτερη από την τιμή του v. Μετά την περιστροφή το δένδρο είναι AVL: Α.height = h + 1 = ύψος του R. 4/12/2017
Παράδειγμα Α-περιστροφής 50 42 5 46 43 Α-ΠΕΡΙΣΤΡΟΦΗ ΑΝΙΣΟΖΥΓΙΑ 72 99 61 58 51 65 4/12/2017
Δεξιά Περιστροφή Συμμετρική ως προς την αριστερή περιστροφή. Συμμετρική ως προς την αριστερή περιστροφή. Πριν την εισαγωγή: τα δένδρα R, S, T έχουν το ίδιο ύψος, h. Μετά την εισαγωγή: έστω ότι ο κόμβος εισάγεται στο δένδρο Τ με αποτέλεσμα το ύψος του Τ να γίνει h+1. Α C Β C Δ περιστροφή A h h+1 B R h h+1 T S h h+1 R S T 4/12/2017
Διαδικασία Δ-περιστροφής Δεξιά περιστροφή του (A,C) σημαίνει Α.right = C.left C.left = Α Α.height = B.height+1 C.height = B.height + 2 Πριν την περιστροφή ο Α ήταν ο πατέρας του C, και μετά, ο C είναι ο πατέρας του Α. Το δένδρο παραμένει δυαδικό δένδρο αναζήτησης. 4/12/2017
ΑΔ-Περιστροφή Τα δένδρα Χ και W έχουν ύψος h. Μετά από κάποια εισαγωγή, το w έχει ύψος h+1, προκαλώντας ανισοζυγία στο u. u w AΔ περιστροφή v h v u W h+1 h+1 h w X Y Z W X h+1 h Y Z 4/12/2017
Παράδειγμα ΑΔ-περιστροφής Με την εισαγωγή των στοιχείων 72, 26, 9, 2, 21, 25 σε ένα ΑVL-δένδρο, δημιουργείται ανισοζυγία στον κόμβο 26. Με εφαρμογή ΑΔ περιστροφής έχουμε: ΑΔ ΠΕΡΙΣΤΡΟΦΗ ΑΝΙΣΟΖΥΓΙΑ 26 9 72 2 21 25 4/12/2017
ΔA-Περιστροφή Τα δένδρα Χ και W έχουν ύψος h. Μετά από κάποια εισαγωγή, το w έχει ύψος h+1, προκαλώντας ανισοζυγία στο u. u w ΔΑ περιστροφή u v h v X h+1 h+1 X Y Z W w h W h h+1 Y Z 4/12/2017
Παράδειγμα ΔΑ περιστροφής 4 ΔΑ ΠΕΡΙΣΤΡΟΦΗ ΑΝΙΣΟΖΥΓΙΑ 2 6 1 5 3 14 7 15 13 4/12/2017
Διαδικασίες ΑΔ και ΔΑ-περιστροφής Διαδικασίες ΑΔ και ΔΑ-περιστροφής ΑΔ περιστροφή του (u,v,w) υλοποιείται ως εξής: v.right = w.left, u.left = w.right, w.left = v, w.right = u, v.height, u.height, w.height = … ΔΑ περιστροφή του (u,v,w) υλοποιείται ως εξής: v.left = w.right, u.right = w.left, w.left = u, w.right = v, και v.height, u.height, w.height = …. H περιστροφές δεν παραβιάζουν τη ΔΔΑ συνθήκη. Το δένδρο που δημιουργείται είναι AVL-δένδρο (οι κόμβοι v και u έχουν ύψος h+1). 4/12/2017
Πως αποφασίζουμε το είδος της περιστροφής Στην θεωρία είναι εύκολο. Βλέπουμε τις κατευθύνσεις που ακολουθήσαμε για να εισάξουμε τον κόμβο Ανάλογα με τις κατευθύνσεις, επιλέγουμε το είδος της περιστροφής. Τι γίνεται τώρα που πρέπει να γράψουμε κώδικα? 4/12/2017
Πως αποφασίζουμε το είδος της περιστροφής Περιστροφή αριστερά: Κάναμε εισαγωγή αριστερά δύο φορές Αριστερή Περιστροφή singleRotationLeft() Κάναμε εισαγωγή αριστερά και μετά δεξία ΑΔ περιστροφήdoubleRotationLeftRight() Περιστροφή δεξιά: Κάναμε εισαγωγή δεξιά δύο φορές Δεξιά ΠεριστροφήsingleRotationRight() Κάναμε εισαγωγή δεξιά και μετά αριστερά ΔΑ περιστροφήdoubleRotationRightLeft() 4/12/2017
Δομές – Συναρτήσεις Βρίσκονται στα αρχεία Συμπληρώστε την: Υλοποίηστε: AVLTree.h AVLTree.cpp Συμπληρώστε την: insertNode() Υλοποίηστε: singleRotationLeft() singleRotationRight() doubleRotationLeftRight() doubleRotationRightLeft() 4/12/2017
The End