1 / 21

EPL231 – Data Structures and Algorithms

Lab 6: AVL Trees. EPL231 – Data Structures and Algorithms. AVL Δέντρα. AVL ( G.M. A delson- V elskii , E.M. L andis) δέντρο: Είναι Δυαδικό Δέντρο Αναζήτησης Τα υποδέντρα ενός οποιουδήποτε κόμβου έχουν ύψος το οποίο διαφέρει το πολύ κατά ένα Χρόνοι: Εισαγωγή Διαγραφή Αναζήτηση. 2. 2.

Download Presentation

EPL231 – Data Structures and Algorithms

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lab 6: AVL Trees EPL231 – Data Structures and Algorithms ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

  2. AVL Δέντρα • AVL ( G.M. Adelson-Velskii , E.M. Landis) δέντρο: • Είναι Δυαδικό Δέντρο Αναζήτησης • Τα υποδέντρα ενός οποιουδήποτε κόμβου έχουν ύψος το οποίο διαφέρει το πολύ κατά ένα • Χρόνοι: • Εισαγωγή • Διαγραφή • Αναζήτηση ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

  3. 2 2 1 3 3 4 2 2 1 3 1 4 Παραδείγματα AVL Δέντρων 2 ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

  4. Παραδείγματα Εκτέλεσης ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

  5. Παράδειγμα • Εισαγωγή των στοιχείων {72, 26, 9} Εισαγωγή 72: ΠΕΡΙΣΤΡΟΦΗ Εισαγωγή 26: 72 ΑΝΙΣΟΖΥΓΙΑ Εισαγωγή 9: 26 9 ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

  6. h h h+1 h+1 Αριστερή Περιστροφή • Πριν την εισαγωγή: τα δένδρα R, S, T έχουν το ίδιο ύψος, h. • Μετά την εισαγωγή: έστω ότι ο κόμβος εισάγεται στο δένδρο R με αποτέλεσμα το ύψος του να γίνει h+1. • Η αριστερή περιστροφή υλοποιεί το εξής: B Α A περιστροφή Β A C h C T R h h S R S T ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

  7. Διαδικασία Α-περιστροφής • Αριστερή περιστροφή του (A,B) σημαίνει • Α.left = Β.right • Β.right = Α • Α.height =C.height+1 • Β.height = C.height + 2 • Πριν την περιστροφή ο Α ήταν ο πατέρας του Β, και μετά, ο Β είναι ο πατέρας του Α. • Το δένδρο παραμένει δυαδικό δένδρο αναζήτησης: • Κάθε τιμή του Υ είναι μικρότερη από την τιμή του u, • η τιμή του u είναι μεγαλύτερη από την τιμή του v. • Μετά την περιστροφή το δένδρο είναι AVL: Α.height = h + 1 = ύψος του R. ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

  8. 50 42 72 99 46 61 5 43 58 65 51 Παράδειγμα Α-περιστροφής ΑΝΙΣΟΖΥΓΙΑ Α-ΠΕΡΙΣΤΡΟΦΗ ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

  9. h h Δεξιά Περιστροφή • Συμμετρική ως προς την αριστερή περιστροφή. • Πριν την εισαγωγή: τα δένδρα R, S, T έχουν το ίδιο ύψος, h. • Μετά την εισαγωγή: έστω ότι ο κόμβος εισάγεται στο δένδρο Τ με αποτέλεσμα το ύψος του Τ να γίνει h+1. Α C Β C A Δ περιστροφή h+1 B R h+1 T S h h+1 S R T ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

  10. Διαδικασία Δ-περιστροφής • Δεξιά περιστροφή του (A,C) σημαίνει • Α.right = C.left • C.left = Α • Α.height =B.height+1 • C.height = B.height + 2 • Πριν την περιστροφή ο Α ήταν ο πατέρας του C, και μετά, ο C είναι ο πατέρας του Α. • Το δένδρο παραμένει δυαδικό δένδρο αναζήτησης. ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

  11. h h ΑΔ-Περιστροφή • Τα δένδρα Χ και W έχουν ύψος h. Μετά από κάποια εισαγωγή, το w έχει ύψος h+1, προκαλώντας ανισοζυγία στο u. u w AΔ περιστροφή v v u W h+1 h+1 w Z W X Y X h h+1 Y Z ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

  12. 72 9 2 21 25 Παράδειγμα ΑΔ-περιστροφής • Με την εισαγωγή των στοιχείων 72, 26, 9, 2, 21, 25 σε ένα ΑVL-δένδρο, δημιουργείται ανισοζυγία στον κόμβο 26.  • Με εφαρμογή ΑΔ περιστροφής έχουμε: ΑΝΙΣΟΖΥΓΙΑ ΑΔ ΠΕΡΙΣΤΡΟΦΗ 26 ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

  13. h ΔA-Περιστροφή • Τα δένδρα Χ και W έχουν ύψος h. Μετά από κάποια εισαγωγή, το w έχει ύψος h+1, προκαλώντας ανισοζυγία στο u. u w ΔΑ περιστροφή u v v h+1 X h+1 Z W X Y w h W h h+1 Y Z ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

  14. 4 2 3 1 5 14 15 7 13 Παράδειγμα ΔΑ περιστροφής ΔΑ ΠΕΡΙΣΤΡΟΦΗ ΑΝΙΣΟΖΥΓΙΑ 6 ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

  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). ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

  16. Πως αποφασίζουμε το είδος της περιστροφής • Στην θεωρία είναι εύκολο. • Βλέπουμε τις κατευθύνσεις που ακολουθήσαμε για να εισάξουμε τον κόμβο • Ανάλογα με τις κατευθύνσεις, επιλέγουμε το είδος της περιστροφής. • Τι γίνεται τώρα που πρέπει να γράψουμε κώδικα? ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

  17. Εφαρμογή περιστροφών • Εισάγουμε το στοιχείο στο κατάλληλο φύλλο όπως ακριβώς σε ένα δυαδικό δένδρο αναζήτησης. Καταγράφουμε τη διαδρομή που ακολουθήσαμε, δηλαδή αν r είναι η ρίζα και u είναι το φύλλο που προσθέσαμε τότε παίρνουμε διαδρομή με μορφή: • Ακολουθούμε τη διαδρομή προς τα πίσω και δίνουμε στα πεδία height των κόμβων τις νέες τους τιμές. • Αν σε κάποιο σημείο αυτό προκαλέσει ανισοζυγία, και μόλις συμβεί αυτό, (δηλ. αν έχει σαν αποτέλεσμα κάποιοι κόμβοι να έχουν παιδιά που το ύψος τους διαφέρει κατά τιμή >1), τότε εφαρμόζουμε στον κόμβο αυτό, έστω vi , την κατάλληλη περιστροφή. Επιλέγουμε την περιστροφή ως εξής: ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

  18. Εφαρμογή περιστροφών • αν ο vi-1 είναι αριστερό παιδί του vi και ο vi-2 αριστερό παιδί του vi-1 τότε εφαρμόζουμε την A-περιστροφή, • αν ο vi-1 είναι δεξιό παιδί του vi και ο vi-2 δεξιό παιδί του vi-1 τότε εφαρμόζουμε τη Δ-περιστροφή, • αν ο vi-1 είναι αριστερό παιδί του vi και ο vi-2 δεξιό παιδί του vi-1 τότε εφαρμόζουμε την AΔ-περιστροφή, • αν ο vi-1 είναι δεξιό παιδί του vi και ο vi-2 αριστερό παιδί του vi-1 τότε εφαρμόζουμε τη ΔA-περιστροφή. ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

  19. Πως αποφασίζουμε το είδος της περιστροφής • Περιστροφή αριστερά: • Κάναμε εισαγωγή αριστερά δύο φορές Αριστερή Περιστροφή singleRotationLeft() • Κάναμε εισαγωγή αριστερά και μετά δεξία  ΑΔ περιστροφήdoubleRotationLeftRight() • Περιστροφή δεξιά: • Κάναμε εισαγωγή δεξιά δύο φορές Δεξιά ΠεριστροφήsingleRotationRight() • Κάναμε εισαγωγή δεξιά και μετά αριστερά  ΔΑ περιστροφήdoubleRotationRightLeft() ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

  20. Δομές – Συναρτήσεις • Βρίσκονται στα αρχεία • AVLTree.h • AVLTree.cpp • Συμπληρώστε την: • insertNode() • Υλοποίηστε: • singleRotationLeft() • singleRotationRight() • doubleRotationLeftRight() • doubleRotationRightLeft() ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

  21. The End ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι

More Related