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

Σχετικά έγγραφα
Προγραμματισμός Ι (ΗΥ120)

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

διεύθυνση πρώτου στοιχείου διεύθυνση i-οστού στοιχείου T t[n]; &t[0] είναι t &t[i] είναι t + i*sizeof(t)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

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

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

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

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

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

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

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

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

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

οµές εδοµένων 3 ο Εξάµηνο ΕΝΟΤΗΤΑ 4 ΕΝ ΡΑ

ΗΥ360 Αρχεία και Βάσεις εδοµένων

Κεφ.11: Ευρετήρια και Κατακερματισμός

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

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

AVL-trees C++ implementation

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

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

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

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

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

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

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

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

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

Δομές δεδομένων. Ενότητα 8: Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find) Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

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

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο)

Οντοκεντρικός Προγραμματισμός

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

Μπαλτάς Αλέξανδρος 21 Απριλίου 2015

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

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

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

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

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

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

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

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ Η/Υ ΠΡΩΤΗ ΠΡΟΟΔΟΣ ΣΤΗΝ «ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Y»

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

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

ΑΛΓΟΡΙΘΜΟΙ ΜΕ C. ΝΙΚΟΛΑΟΣ ΣΑΜΑΡΑΣ Αναπληρωτής Καθηγητής. CMOR Lab. Computational Methodologies and Operations Research

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Βασικές Ιδιότητες και Διάσχιση Κεφάλαιο 5 ( και ) Ε. Μαρκάκης Επίκουρος Καθηγητής

Red- black δέντρα Εκτενείς Δομές Δεδομένων (Κεφ. 5)

Φροντιστήριο 4 Σκελετοί Λύσεων

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

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

5 ΔΕΝΤΡΑ (Trees) Σχήµα 5.1 : ενδροειδής αναπαράσταση αρχείων στα Windows. έντρα. \ {root directory} Accessories. Program Files.

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

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

Αναδρομικοί Αλγόριθμοι

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

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

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

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

ΔυαδικάΔΕΝΔΡΑΑναζήτησης

Εισαγωγή ενός νέου στοιχείου. Επιλογή i-οστoύ στοιχείου : Εύρεση στοιχείου με το i-οστό μικρότερο κλειδί

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

υαδικό έντρο Αναζήτησης (BSTree)

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Διακριτά Μαθηματικά. Ενότητα 3: Δένδρα

Εργαστήριο 2 Δυναμικές Δομές Δεδομένων Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

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

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

Red-black δέντρα (Κεφ. 5)

Union Find, Λεξικό. Δημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

Αλγόριθμοι Ταξινόμησης Μέρος 2

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος Προγραμματιστική Εργασία - 2o Μέρος

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

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

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

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

HY240 : Δομές Δεδομένων. Φροντιστήριο Προγραμματιστικής Εργασίας 2 ο και 3 ο Μέρος

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 4η: Σύνολα - Λεξικά Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

Αλγόριθμοι Ταξινόμησης Μέρος 3

Γέφυρες σε Δίκτυα. Μας δίνεται ένα δίκτυο (κατευθυνόμενο γράφημα) αφετηριακός κόμβος. Γέφυρα του (με αφετηρία τον ) :

Διάλεξη 15: Δομές Δεδομένων IV (Διπλά Συνδεδεμένες Λίστες)

Οι λίστες, χάνοντας τα πλεονεκτήματα των πινάκων, λύνουν προβλήματα που παρουσιάζουν οι πίνακες

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

Transcript:

Προγραμματισμός Ι (ΗΥ120) Διάλεξη 20: Δυαδικό Δέντρο Αναζήτησης

Δυαδικό δέντρο Κάθε κόμβος «γονέας» περιέχει δύο δείκτες που δείχνουν σε δύο κόμβους «παιδιά» του ιδίου τύπου. Αν οι δείκτες προς αυτούς τους κόμβους είναι NULL, δηλαδή ένας κόμβος δεν έχει παιδιά, τότε ο κόμβος ονομάζεται φύλλο (leaf). Τα παιδιά ενός κόμβου μπορεί και αυτά με την σειρά τους να έχουν παιδιά κλπ. Το δέντρο είναι μια ακόμα αναδρομική δομή: ένα δέντρο είναι είτε : Κενό, είτε Αποτελείται από ένα κόμβο που δείχνει σε δύο υποδέντρα. 2

D 3 B F A C E G

Συνθήκη δυαδικού δέντρου αναζήτησης Η ιδιότητα του δέντρου αναζήτησης είναι: εξετάζοντας έναν οποιονδήποτε κόμβο με τιμή v: όλοι οι κόμβοι που βρίσκονται στο αριστερό υποδέντρο του έχουν τιμή μικρότερη του v και όλοι οι κόμβοι που βρίσκονται στο δεξί υποδέντρο έχουν τιμή μεγαλύτερη του v 4 Σημείωση: υποθέτουμε ότι δεν επιθυμούμε να υπάρχουν «διπλά» στοιχεία (με ίδια τιμή).

5 x elements < x elements > x

Ενδεικτική υλοποίηση Κάθε κόμβος περιέχει δύο δείκτες που δείχνουν στο επόμενο αριστερό και δεξί υποδέντρο, αντίστοιχα. Αναζήτηση: αρχίζουμε από την ρίζα και κατευθυνόμαστε προς το αριστερό ή δεξί υποδέντρο, ανάλογα με την τιμή των κόμβων που βρίσκουμε στο μονοπάτι μας. Εισαγωγή: ο νέος κόμβος εισάγεται σαν φύλλο του κόμβου στον οποίο φτάνουμε αναζητώντας την τιμή που επιθυμούμε να προσθέσουμε. Απομάκρυνση: ο κόμβος εντοπίζεται με αναζήτηση, και αντικαθίσταται με τον «μεγαλύτερο» κόμβο του αριστερού υποδέντρου ή τον «μικρότερο» κόμβο του δεξιού υποδέντρου. 6

Επιτυχής αναζήτηση root find 23 7 25 15 45 20 30 50 23 35

Αποτυχημένη αναζήτηση root find 37 8 25 15 45 20 30 50 23 35

struct btree { int v; struct btree *l,*r; }; 9 struct btree *root; int btree_find(int v) { struct btree *curr; } curr = root; while ((curr!= NULL) && (curr->v!= v)) { if (curr->v > v) curr = curr->l; else /* curr->v < v */ curr = curr->r; } return(curr!= NULL);

Εισαγωγή root add 5 25 15 45 20 30 50 23 35

Εισαγωγή root add 5 11 25 15 45 20 30 50 5 23 35

int btree_insert(int v) { struct btree *curr,*prev; prev = NULL; curr = root; while ((curr!= NULL) && (curr->v!= v)) { prev = curr; if (curr->v > v) curr = curr->l; else /* curr->v < v */ curr = curr->r; } if (curr!= NULL) return(-1); 12 curr = (struct btree *)malloc(sizeof(struct btree)); if (curr == NULL) return(0); curr->v = v; curr->r = NULL; curr->l = NULL; /* διασύνδεση με τον κόμβο γονέα, αν υπάρχει */ if (prev == NULL) root = curr; else if (prev->v > v) prev->l = curr; else /* prev->v < v */ prev->r = curr; return(1);

Απομάκρυνση root remove 45 13 25 15 45 20 30 50 5 23 35

Απομάκρυνση root remove 45 14 25 15 45 20 30 50 5 23 35

Απομάκρυνση (εναλλακτικά) root remove 45 15 25 15 45 20 30 50 5 23 35

Πως; Τι; Αν απομακρυνθεί ένας κόμβος που δεν είναι φύλλο, τότε πρέπει να αντικατασταθεί με έναν κόμβο από τα υποδέντρα του έτσι ώστε να εξακολουθεί να ισχύει η συνθήκη αναζήτησης του δέντρου. Ο κόμβος που απομακρύνεται (με τιμή v) πρέπει να αντικατασταθεί από Το μεγαλύτερο κόμβο του αριστερού υποδέντρου (που φέρει την μεγαλύτερη τιμή που είναι μικρότερη v) ή Το μικρότερο κόμβο του δεξιού υποδέντρου (που φέρει την μικρότερη τιμή που είναι μεγαλύτερη v). Σημείωση: αφού ο κόμβος που απομακρύνεται δεν είναι φύλλο, είναι εγγυημένο ότι τουλάχιστον ένα από τα δύο υποδέντρα του δεν είναι άδεια. 16

void btree_remove(int v) { struct btree *curr,*prev,*subst; prev = NULL; curr = root; while ((curr!= NULL) && (curr->v!= v)) { prev = curr; if (curr->v > v) curr = curr->l; else /* curr->v < v */ curr = curr->r; } 17 if (curr!= NULL) { subst = getreplacement(curr); /* ανεύρεση αντικαταστάτη */ /* ο αντικαταστάτης κληρονομεί τα υποδέντρα του κόμβου curr που απομακρύνεται */ if (subst!= NULL) { subst->l = curr->l; subst->r = curr->r; } /* σύνδεση αντικαταστάτη με τον γονέα του κόμβου curr */ if (prev == NULL) root = subst; else if (prev->l == curr) prev->l = subst; else /* prev->r == curr */ prev->r = subst; } } free(curr);

struct btree *getreplacement(struct btree *tree) { struct btree *curr,*prev; } if (tree->l!= NULL) { /* βρες και απομάκρυνε τον πιο "μεγάλο" κόμβο του αριστερού υποδέντρου */ for(prev=tree,curr=tree->l; curr->r!=null; prev=curr,curr=curr->r); if (prev == tree) prev->l = curr->l; else prev->r = curr->l; return(curr); } else if (tree->r!= NULL) { /* βρες και απομάκρυνε τον πιο "μικρό" κόμβο του δεξιού υποδέντρου */ for(prev=tree,curr=tree->r; curr->l!=null; prev=curr,curr=curr->l); if (prev == tree) prev->r = curr->r; else prev->l = curr->r; return(curr); } else /* ο κόμβος tree είναι φύλλο και δεν έχει παιδιά */ return(null); 18

αφαίρεση 7 4 2 19 1 3 7 11 1) Εύρεση 7 2) Εύρεση αντικαταστάτη 7 6 9 5 8

αφαίρεση 7 4 2 20 1 3 7 11 1) Εύρεση 7 2) Εύρεση αντικαταστάτη 7 3) «Τροποποίηση» υποδέντρου του 7 6 9 5 8

αφαίρεση 7 4 2 21 1 3 6 11 1) Εύρεση 7 2) Εύρεση αντικαταστάτη 7 3) «Τροποποίηση» υποδέντρου του 7 4) «Αντικατάσταση» του 7 5 8 9

αφαίρεση 4 2 22 1 3 7 11 1) Εύρεση 2) Εύρεση αντικαταστάτη 6 9 5 8

αφαίρεση 4 2 23 1 3 7 11 1) Εύρεση 2) Εύρεση αντικαταστάτη 3) «Τροποποίηση» υποδέντρου του 6 9 5 8

αφαίρεση 4 2 9 24 1 3 7 11 1) Εύρεση 2) Εύρεση αντικαταστάτη 3) «Τροποποίηση» υποδέντρου του 4) «Αντικατάσταση» του 6 5 8

Παρατηρήσεις Η δεντρική δομή δημιουργεί προϋποθέσεις για αποδοτική αναζήτηση Κατά μέσο όρο σε log 2 N βήματα, όπως και στην δυαδική αναζήτηση σε ταξινομημένο πίνακα. Αυτό ισχύει μόνο αν το δέντρο είναι ισορροπημένο (balanced), δηλαδή αν για κάθε κόμβο ο αριθμός των κόμβων του αριστερού υποδέντρου είναι (περίπου) ίσος με τον αριθμό των κόμβων στο δεξί υποδέντρο. Παρατήρηση: αυτό είναι μια αναδρομική ιδιότητα. Αυτή η ιδιότητα επιτυγχάνεται εφόσον οι πράξεις εισαγωγής και απομάκρυνσης εξισορροπούν το δέντρο, όποτε αυτό κρίνεται απαραίτητο. 25