Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
1
EPL231 – Data Structures and Algorithms
Lab 6: AVL Trees EPL231 – Data Structures and Algorithms 23/10/2009
2
AVL Δέντρα AVL δέντρο: Χρόνοι: Είναι Δυαδικό Δέντρο Αναζήτησης
Τα υποδέντρα ενός οποιουδήποτε κόμβου έχουν ύψος το οποίο διαφέρει το πολύ κατά ένα Χρόνοι: Εισαγωγή Διαγραφή Αναζήτηση 23/10/2009
3
Παραδείγματα AVL Δέντρων
2 2 1 3 4 2 3 4 2 1 2 1 3 23/10/2009
4
Παραδείγματα Εκτέλεσης
23/10/2009
5
Παράδειγμα Εισαγωγή των στοιχείων {72, 26, 9} Εισαγωγή 72: ΠΕΡΙΣΤΡΟΦΗ
Εισαγωγή 26: 72 ΑΝΙΣΟΖΥΓΙΑ Εισαγωγή 9: 26 9 23/10/2009
6
Αριστερή Περιστροφή Πριν την εισαγωγή: τα δένδρα 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 23/10/2009
7
Διαδικασία Α-περιστροφής
Αριστερή περιστροφή του (A,B) σημαίνει Α.left = Β.right Β.right = Α Α.height = C.height+1 Β.height = C.height + 2 Πριν την περιστροφή ο Α ήταν ο πατέρας του Β, και μετά, ο Β είναι ο πατέρας του Α. Το δένδρο παραμένει δυαδικό δένδρο αναζήτησης: Κάθε τιμή του Υ είναι μικρότερη από την τιμή του u, η τιμή του u είναι μεγαλύτερη από την τιμή του v. Μετά την περιστροφή το δένδρο είναι AVL: Α.height = h + 1 = ύψος του R. 23/10/2009
8
Παράδειγμα Α-περιστροφής
50 42 5 46 43 Α-ΠΕΡΙΣΤΡΟΦΗ ΑΝΙΣΟΖΥΓΙΑ 72 99 61 58 51 65 23/10/2009
9
Δεξιά Περιστροφή Συμμετρική ως προς την αριστερή περιστροφή.
Συμμετρική ως προς την αριστερή περιστροφή. Πριν την εισαγωγή: τα δένδρα 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 23/10/2009
10
Διαδικασία Δ-περιστροφής
Δεξιά περιστροφή του (A,C) σημαίνει Α.right = C.left C.left = Α Α.height = B.height+1 C.height = B.height + 2 Πριν την περιστροφή ο Α ήταν ο πατέρας του C, και μετά, ο C είναι ο πατέρας του Α. Το δένδρο παραμένει δυαδικό δένδρο αναζήτησης. 23/10/2009
11
ΑΔ-Περιστροφή Τα δένδρα Χ και 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 23/10/2009
12
Παράδειγμα ΑΔ-περιστροφής
Με την εισαγωγή των στοιχείων 72, 26, 9, 2, 21, 25 σε ένα ΑVL-δένδρο, δημιουργείται ανισοζυγία στον κόμβο 26. Με εφαρμογή ΑΔ περιστροφής έχουμε: ΑΔ ΠΕΡΙΣΤΡΟΦΗ ΑΝΙΣΟΖΥΓΙΑ 26 9 72 2 21 25 23/10/2009
13
Δ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 23/10/2009
14
Παράδειγμα ΔΑ περιστροφής
4 ΔΑ ΠΕΡΙΣΤΡΟΦΗ ΑΝΙΣΟΖΥΓΙΑ 2 6 1 5 3 14 7 15 13 23/10/2009
15
Διαδικασίες ΑΔ και ΔΑ-περιστροφής
Διαδικασίες ΑΔ και ΔΑ-περιστροφής ΑΔ περιστροφή του (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). 23/10/2009
16
Πως αποφασίζουμε το είδος της περιστροφής
Στην θεωρία είναι εύκολο. Βλέπουμε τις κατευθύνσεις που ακολουθήσαμε για να εισάξουμε τον κόμβο Ανάλογα με τις κατευθύνσεις, επιλέγουμε το είδος της περιστροφής. Τι γίνεται τώρα που πρέπει να γράψουμε κώδικα? 23/10/2009
17
Πως αποφασίζουμε το είδος της περιστροφής
Περιστροφή αριστερά: Κάναμε εισαγωγή αριστερά δύο φορές Αριστερή Περιστροφή singleRotationLeft() Κάναμε εισαγωγή αριστερά και μετά δεξία ΑΔ περιστροφήdoubleRotationLeftRight() Περιστροφή δεξιά: Κάναμε εισαγωγή δεξιά δύο φορές Δεξιά ΠεριστροφήsingleRotationRight() Κάναμε εισαγωγή δεξιά και μετά αριστερά ΔΑ περιστροφήdoubleRotationRightLeft() 23/10/2009
18
Δομές – Συναρτήσεις Βρίσκονται στα αρχεία Συμπληρώστε την: Υλοποίηστε:
AVLTree.h AVLTree.cpp Συμπληρώστε την: insertNode() Υλοποίηστε: singleRotationLeft() singleRotationRight() doubleRotationLeftRight() doubleRotationRightLeft() 23/10/2009
19
The End 23/10/2009
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.