AVL δέντρα. h L h R. G.M. Adelson_Velkii και E.M. Landis 1962

Σχετικά έγγραφα
Μη AVL Δέντρα Εισαγωγή κόμβου 4, 6 : 4 12 :

ρίζα E F G H I J επίπεδο 1

Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 6: ΑΤΔ Δένδρο, ΑΤΔ Δυαδικό Δένδρο Αναζήτησης (ΔΔΑ)

Δυαδικά Δέντρα Αναζήτησης (Binary Search Trees) Ορισμός : Ένα δυαδικό δέντρο αναζήτησης t είναι ένα δυαδικό δέντρο, το οποίο είτε είναι κενό είτε:

ΟιβασικέςπράξειςπουορίζουντονΑΤΔ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:

Οι βασικές πράξεις που ορίζουν τον ΑΤ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:

Δέντρα (Trees) - Ιεραρχική Δομή

υαδικό δέντρο έντρα (Trees) -Ιεραρχική οµή

Ισοζυγισμένα υαδικά έντρα Αναζήτησης

2 η Υλοποίηση του ΑΤΔ συνδεδεμένη λίστα με πίνακα Κόμβοι από δεδομένα και θέσεις πίνακα ????

Προγραμματισμός Ι (ΗΥ120)

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

Εκτενείς Δομές Δεδομένων

ιαφάνειες παρουσίασης #10 (β)

Δομές Δεδομένων. Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός. Καθηγήτρια Μαρία Σατρατζέμη

Εκτενείς Δομές Δεδομένων

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

ΣΤΟΙΒΕΣ (stacks) Σχήµα: Λειτουργία Στοίβας

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΛΙΣΤΕΣ. Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα. Εφαρμογές και Χρήση Λιστών

Δομές Δεδομένων και Αλγόριθμοι

AVL-trees C++ implementation

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

ΕΠΛ232: Εργαστήριο 2

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Δέντρα Αναζήτησης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διάλεξη 13: Δέντρα ΙΙΙ - Ισοζυγισμένα Δέντρα, AVL Δέντρα

Δοµές Δεδοµένων. 18η Διάλεξη Ισορροπηµένα δέντρα. Ε. Μαρκάκης

Διδάσκων: Παναγιώτης Ανδρέου

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

Ισοζυγισµένο έντρο (AVL Tree)

ΠΛΗ111. Ανοιξη Μάθηµα 7 ο. έντρο. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

έντρα ομές εδομένων 3ο εξάμηνο ιδάσκων: Χρήστος ουλκερίδης ιαφάνειες προσαρμοσμένες από το υλικό της Μαρίας Χαλκίδη

Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

Δομές Δεδομένων. Ενότητα 1: Εισαγωγή-Υλοποίηση του ΑΤΔ Σύνολο με Πίνακα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

έντρα Πολλαπλής ιακλάδωσης και (a, b)- έντρα

Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

Δομές Δεδομένων. Ενότητα 13: B-Δέντρα/AVL-Δέντρα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες

Σχεδιασμός: Λίστα με Συνδεδεμένους Κόμβους

Δομές Αναζήτησης. κλειδί από ολικά διατεταγμένο σύνολο. Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου

Δομές Δεδομένων (Data Structures)

Διδάσκων: Παναγιώτης Ανδρέου

Tύπος δεδοµένων (data type) µιας µεταβλητής (σε µια γλώσσα προγραµµατισµού) είναι το σύνολο των τιµών που µπορεί να πάρει η µεταβλητή.

Δομές Δεδομένων. Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα. Καθηγήτρια Μαρία Σατρατζέμη

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Δέντρα Αναζήτησης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Δομές δεδομένων. Ενότητα 5η: Υλοποίηση Λεξικών με Ισοζυγισμένα Δένδρα Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα

Οι Πράξεις. 1 η Υλοποίηση του ΑΤΔ: μονά συνδεδεμένη λίστα με δείκτες. Σχεδιασμός: Λίστα με Συνδεδεμένους Κόμβους

Πελάτες φθάνουν στο ταμείο μιας τράπεζας Eνα μόνο ταμείο είναι ανοικτό Κάθε πελάτης παρουσιάζεται με ένα νούμερο - αριθμός προτεραιότητας Όσο ο

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

υαδικά έντρα Αναζήτησης

ΠΛΗ111. Ανοιξη Μάθηµα 5 ο. Ουρά. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

Δομές Δεδομένων. Ενότητα 9: Τα ΔΔΑ ως Αναδρομικές Δομές Δεδομένων-Εφαρμογή Δυαδικών Δέντρων: Κωδικοί Huffman. Καθηγήτρια Μαρία Σατρατζέμη

Δημιουργία Δυαδικών Δέντρων Αναζήτησης

Δένδρα. Μαθηματικά (συνδυαστικά) αντικείμενα. Έχουν κεντρικό ρόλο στην επιστήμη των υπολογιστών :

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

ΣΥΜΒΟΛΟΣΕΙΡΕΣ (Strings) Ο ΑΤΔ Συµβολοσειρά Μία συµβολοσειρά είναι µία ακολουθία χαρακτήρων. Bασικές πράξεις : 1. Δηµιουργία. 2. Μήκος. 3.

Εργασία 3 Σκελετοί Λύσεων

ΠΛΗ111. Ανοιξη Μάθηµα 4 ο. Στοίβα. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Ουρά Προτεραιότητας (priority queue)

Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα

Ηλεκτρονικοί Υπολογιστές

Υλοποίηση Λιστών. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Δοµές Δεδοµένων. 14η Διάλεξη Δέντρα Δυαδικής Αναζήτησης. Ε. Μαρκάκης

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΔΕΝΤΡΑ (TREES) B C D E F G H I J K L M

Αλγόριθµοι και Πολυπλοκότητα

9. Κόκκινα-Μαύρα Δέντρα

Δομές Δεδομένων. Ενότητα 2: Στοίβες Εισαγωγή-Υλοποίηση ΑΤΔ Στοίβα με Πίνακα-Εφαρμογή Στοίβας: Αντίστροφη Πολωνική Γραφή. Καθηγήτρια Μαρία Σατρατζέμη

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Κατ οίκον Εργασία 3 Σκελετοί Λύσεων

Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort

Διδάσκων: Κωνσταντίνος Κώστα

Εισαγωγή στους Αλγορίθμους

Ουρές (Queues) FIFO A B C. Διαγραφή. Εισαγωγή. εµπρός. πίσω. πίσω. πίσω

Δομές Δεδομένων και Αλγόριθμοι

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ουρές Προτεραιότητας. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Ενότητα 7 Ουρές Προτεραιότητας

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Δομές Δεδομένων & Αλγόριθμοι

Εισαγωγή στους Αλγορίθμους Ενότητα 3η

ΕΝΟΤΗΤΑ 5 ΣΥΝΟΛΑ - ΛΕΞΙΚΑ. ΗΥ240 - Παναγιώτα Φατούρου 1

ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ

Λίστες (Lists) Ο ΑΤΔ λίστα είναι µια συλλογή στοιχείων του ίδιου τύπου µε

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες

ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ. Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out)

ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ. Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out)

Κατ οίκον Εργασία 3 Σκελετοί Λύσεων

Κεφάλαιο 2. Η δομή δεδομένων Σωρός και η Ταξινόμηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.3, 14/11/2014

Δένδρα. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Δείκτες και Δομές. Info. Link. typedef struct NodeTag { InfoField Info; struct NodeTag *Link; } NodeType;

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Transcript:

AVL δέντρα L - R 1 L R G.M. AdelsonVelkii και E.M. Landis 1962

AVL Δέντρα

Μη AVL Δέντρα

Εισαγωγή κόμβου 4, 6 : 4 12 : 6 4 6 Αριστερή στροφή 6 4 12 12

8, 14 : 6 4 12 8 14

7 : 4 6 12 6 4 8 6 8 12 7 8 14 Δεξιά στροφή 7 Αριστερή στροφή 12 14 4 7 14

4 Περιπτώσεις LL : ο νέος κόμβος Υ εισάγεται στο αριστερό υποδέντρο του αριστερού υποδέντρου του Α. LR : ο νέος κόμβος Υ εισάγεται στο δεξί υποδέντρο του αριστερού υποδέντρου του Α. RR : ο νέος κόμβος Υ εισάγεται στο δεξί υποδέντρο του δεξιού υποδέντρου του Α. RL : ο νέος κόμβος Υ εισάγεται στο αριστερό υποδέντρο του δεξιού υποδέντρου του Α.

Περίπτωση 1 (RR) : Δεξιά Υψηλό Τ 1 p. r Αριστερή στροφή x. prosorinos p. r 1 2 +1 3 p. 4. prosorinos x +1 Τ 3 Τ 2 Τ 3 Τ 1 Τ 2 Συνολικό ύψος = +3 νέος Συνολικό ύψος = +2

typedef enum{true, FALSE}; typedef enum{ay, IY, DY} paragonisozygisis; typedef struct typoskomvou *typosdeikti; typedef struct typoskomvou{ typosstoixeiou dedomena; typosdeikti apaidi, dpaidi; paragonisozygisis pi; } typoskomvou;

void aristeriperistrofi (typosdeikti *p);{ /*Ο p δείχνει τη ρίζα του υποδέντρου που περιστρέφεται*/ typosdeikti prosorinos; if (kenodentro(*p)) /*Είναι αδύνατη η περιστροφή*/ printf( Κενό δέντρο ) /*ενός κενού δέντρου*/ else if (kenodentro((*p)->dpaidi)) /*Είναι αδύνατο να γίνει ρίζα ένα κενό υποδέντρο*/ printf ( Κενό δεξί υποδέντρο ) else{ prosorinos = (*p)->dpaidi; (*p)->dpaidi = prosorinos->apaidi; prosorinos->apaidi =* p; *p = prosorinos; } } /*aristeriperistrofi*/

Περίπτωση 2 (RL):Αριστερά Υψηλό 2 r w 1 Τ 1-1 ή Τ 2 ή - 1 ή Τ 3 Τ 4 νέος νέος Ενα από τα Τ 2 ή Τ 3 έχει ύψος..συνολικό ύψος = +3

r w Τ 1 x Τ 2.Συνολικό ύψος = +3 Τ 3-1 Τ 4

w r x Τ 1 Τ 2 Τ 3 Τ 4.Συνολικό ύψος = +2 Αποκατάσταση ισοζύγισης (διπλή RL περιστροφή). Οι αριθμοί στους κύκλους δηλώνουν την προτεραιότητα των ενεργειών.

παλιό w νέο r νέο x

H αποκατάσταση της ισοζύγισης με τις RR και RL περιστροφές υλοποιείται με το παρακάτω υποπρόγραμμα. void dexivaros(typosdeikti *riza,boolean *ypsilotero){ typosdeikti x; //δείκτης στο δεξί υποδέντρο της ρίζας typosdeikti w; x = (*riza)->dpaidi; switc (x->pi){ case DY: //απλή RR περιστροφή (*riza)->pi = IY; x->pi = IY; aristeriperistrofi(riza); *ypsilotero = FALSE; break; case IY: /*Δεν συμβαίνει η περίπτωση αυτή*/ printf ( Λάθος ); break; συνέχεια

case AY:/*διπλή RL περιστροφή*/ w = x->apaidi; switc (w->pi){ case IY: (*riza)->pi=iy; x->pi= IY; break; case AY: (*riza)->pi=iy; x->pi= DY; break; case DY: (*riza)->pi=ay; x->pi= IY; break; } w->pi=iy; dexiaperistrofi(&x); /*o x δείχνει τώρα τον w*/ (*riza)->dpaidi = x; aristeriperistrofi(riza); ypsilotero = FALSE; } // of switc }/*dexivaros*/

Tο υποπρόγραμμα εισαγωγής ενός κόμβου σε ένα AVL δέντρο είναι το ακόλουθο : void avleisagogi (typosdeikti *riza, typosdeikti prosorinos, typosdeikti stoixeio, boolean *ypsilotero) { συνέχεια

if (kenodentro(*riza)){ *riza = prosorinos; (*riza)->apaidi = NULL; (*riza)->dpaidi = NULL; (*riza)->pi = IY; *ypsilotero = TRUE;} else if (prosorinos->dedomena==(*riza)->dedomena) printf( Ο κόμβος υπάρχει ήδη στο ΔΔΑ ); else if (prosorinos->dedomena<(*riza)->dedomena){ /*εισαγωγή στο αριστερό υποδέντρο*/ avleisagogi(&((*riza)->apaidi)), prosorinos, stoixeio, ypsilotero); συνέχεια

} if (*ypsilotero) switc ((*riza)->pi){ case AY: aristerovaros(riza, ypsilotero); break; case IY: (*riza)->pi=ay; *ypsilotero=true; break; case DY: (*riza)->pi=iy; *ypsilotero=false; break; } συνέχεια

else{/*εισαγωγή στο δεξί υποδέντρο*/ avleisagogi (&((*riza)->dpaidi), prosorinos, stoixeio, ypsilotero); if (*ypsilotero) switc ((*riza)->pi){ case AY: (*riza)->pi=iy; *ypsilotero=false; break; case IY: (*riza)->pi=dy; *ypsilotero=true; break; case DY: dexivaros(riza, ypsilotero); break; } } } }/*avleisagogi*/

Διαγραφή p p Αμετάβλητο ύψος Τ1 Τ1 Τ2 Τ2 διαγράφτηκε p Περίπτωση 1 Ελαττωμένο ύψος Τ1 Τ2 Τ1 Τ2 διαγράφτηκε Περίπτωση 2

p q q p Αμετάβλητο ύψος -1 Τ1-1 Τ1 Τ3 Τ2 Τ3 Τ2 διαγράφτηκε Περίπτωση 3a

p q q p Ελαττωμένο ύψος -1 Τ1-1 -1 Τ1 Τ2 Τ3 Τ2 διαγράφτηκε Τ3 Περίπτωση 3b

-1 Τ1 r p r q p Αμετάβλητο ύψος q -1-1 Τ2-1 ή Τ3-1 Τ2-1 -2 ή Τ3 Τ4 Τ1 Τ4-2 Περίπτωση 3c Σχήμα 8.22 Διάφορες περιπτώσεις διαγραφής κόμβου από ένα AVL δέντρο.

Το ύψος ενός AVL δέντρου -1 F l F r -2 F F-1 F- 2 1 F 0 1 F 1 2 F 1 1 1 5 2 5 k 2-1 5 1-2 5 2

1.44 log 2 F ή 1.44 log2n Επομένως οι αλγόριθμοι για την επεξεργασία των AVL δέντρων απαιτούν το πολύ 44% περισσότερο χρόνο από το βέλτιστο. Στην πράξη όμως έχει βρεθεί ότι ο χρόνος αυτός είναι πολύ λιγότερος.