Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

EPL231 – Data Structures and Algorithms

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "EPL231 – Data Structures and Algorithms"— Μεταγράφημα παρουσίασης:

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


Κατέβασμα ppt "EPL231 – Data Structures and Algorithms"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google