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

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

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

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

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

Ουρά Προτεραιότητας: Heap

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

Λεξικό, Union Find. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

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

Λεξικό, Union Find. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

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

Λεξικό, Union Find. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

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

Ουρά Προτεραιότητας: Heap

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

Λεξικό, Union Find. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

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

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

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

ΠΛΗ 20, 6 η ΟΣΣ: Δέντρα Εξετάσεις

Αναδροµή. Σε αυτήν την (βοηθητική) ενότητα θα µελετηθούν τα εξής : Η έννοια της αναδροµής Υλοποίηση και αποδοτικότητα Αφαίρεση της αναδροµής

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

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

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

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

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

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

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

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

Πρόβληµα (ADT) Λεξικού. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Λεξικό, Union - Find 2

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

Ουρά Προτεραιότητας: Heap

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 3 Δέντρα

Δοµές Δεδοµένων. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Ουρές Προτεραιότητας 2

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

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

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

Ουρά Προτεραιότητας: Heap

ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 8-1

Βασικές Προτάσεις. έντρα. υαδικά έντρα Αναζήτησης ( Α) Ισοζυγισµένα έντρα και Υψος. Κάθε δέντρο µε n κόµβους έχει n 1 ακµές.

Αλγόριθμοι Αναζήτησης

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

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

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

ΕΝΟΤΗΤΑ 4 ΣΥΝΟΛΑ - ΛΕΞΙΚΑ

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

Ουρές προτεραιότητας

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

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

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

Στοιχεία Θεωρίας Γραφηµάτων (4) - έντρα

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

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

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

Διάλεξη 14: Δέντρα IV - B-Δένδρα

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

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

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

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

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

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

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

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

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

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

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

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

Πρόβληµα Επιλογής. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Επιλογή 1

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

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΝΟΤΗΤΑ 5 ΥΝΑΜΙΚΑ ΛΕΞΙΚΑ ΙΣΟΖΥΓΙΣΜΕΝΑ ΕΝ ΡΑ

Quicksort. Πρόβλημα Ταξινόμησης. Μέθοδοι Ταξινόμησης. Συγκριτικοί Αλγόριθμοι

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

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

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

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

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

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

Μάθημα 22: Δυαδικά δέντρα (Binary Trees)

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

Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ουρές Προτεραιότητας Σωροί υλοποίηση και πράξεις Ο αλγόριθμος ταξινόμησης HeapSort

Insert(K,I,S) Delete(K,S)

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

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

AVL-trees C++ implementation

Cuckoo Hashing. Αλγόριθμοι και Πολυπλοκότητα. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

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

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

Quicksort. Επιμέλεια διαφανειών: Δ. Φωτάκης Μικροαλλαγές: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

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

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

Επιλογή. Πρόβλημα Επιλογής. Μέγιστο / Ελάχιστο. Εφαρμογές

Διαίρει-και-Βασίλευε. Διαίρει-και-Βασίλευε. MergeSort. MergeSort. Πρόβλημα Ταξινόμησης: Είσοδος : ακολουθία n αριθμών (α 1

Κεφάλαιο 7 Λεξικά και Δυαδικά Δένδρα Αναζήτησης

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

Transcript:

ηµήτρης Φωτάκης Τµήµα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστηµάτων Πανεπιστήµιο Αιγαίου υαδικά έντρα µε ρίζα. Κάθε εσωτερικός κόµβος περιέχει στοιχείο (αριθµό) και έχει δύο παιδιά. NULL-φύλλα (εξωτερικοί κόµβοι): τερµατικοί (NULL) δείκτες χωρίς στοιχεία. Για κάθε κόµβο u, κόµβο left στο αριστερό υποδένδρο του u, και κόµβο right στο δεξιό υποδένδρο του u, στοιχείο(left) στοιχείο(u) στοιχείο(right) Inorder διέλευση τυπώνει στοιχεία σε αύξουσα σειρά. Απόδειξη µε επαγωγή. οµή Α επιτρέπει εύκολη αναζήτηση! οµές εδοµένων 2 root υαδικά έντρα µε ρίζα. Για κάθε κόµβο u, κάθε κόµβο left στο αριστερό υποδένδρο του u, και κάθε κόµβο right στο δεξιό υποδένδρο του u, στοιχείο(left) στοιχείο(u) στοιχείο(right) 8 typedef struct _tnode { struct _tnode *left, *right, *par; int key; } tnode; tnode root = NULL; Λειτουργίες: search(x), insert(x), delete(x) min() / max() succ() / pred() par left right 5 22 32 38 40 45 36 39 3 9 40 31 οµές εδοµένων 3 οµές εδοµένων 4

Αναζήτηση Ακολουθούµε µονοπάτι από ρίζα προς φύλλο: Αν x = στοιχείο κόµβου, εύρεση Αν x < στοιχείο κόµβου, πηγαίνουµε αριστερά Αν x > στοιχείο κόµβου, πηγαίνουµε δεξιά Ορθότητα: ιδιότητα Α Χρόνος εκτέλεσης: Ο(ύψος) tnode *search(int x) { tnode *p = root; while (p!= NULL) { if (x == p->key) break; if (x < p->key) p = p->left; else } 3 9 40 οµές εδοµένων 5 Μέγιστο / Ελάχιστο Μέγιστο : δεξιότατος (rightmost) κόµβος. Ελάχιστο : αριστερότατος (leftmost) κόµβος. int max() min() { tnode *p = root; if (p == NULL) return(empty); while (p->right (p->left!=!= NULL) p->left; return(p->key); } οµές εδοµένων 6 Εισαγωγή στη θέση NULL-φύλλου που καταλήγει αποτυχηµένη αναζήτηση στοιχείου. ιατηρείται ιδιότητα Α. Εισαγωγή int insert(int x) { tnode *p = root, *q = NULL, *z; while (p!= NULL) { q = p; if (x == p->key) return(found); if (x < p->key) p = p->left; else } z = malloc(sizeof(tnode)); z->key = x; z->par = q; z->left = z->right = NULL; if (q == NULL) root = z; else if (x < q->key) q->left = z; else q->right = z; return(ok); } οµές εδοµένων οµές εδοµένων 8

Επόµενος Επόµενος κόµβου p στην inorder διέλευση. Αν p έχει (µη-κενό) δεξί υποδέντρο, αριστερότατος κόµβος (ελάχιστο στοιχείο) δεξιού υποδένδρου. ιαφορετικά, ψηλότερο υποδέντρο Τ για το οποίο p δεξιότατος κόµβος (µέγιστο στοιχείο). Αν ρίζα Τ είναι ρίζα δέντρου, p τελευταίος κόµβος. ιαφορετικά, ρίζα Τ είναι αριστερό παιδί κόµβου q. Κόµβος q είναι επόµενος p. οµές εδοµένων 9 Επόµενος Αν p έχει (µη-κενό) δεξί υποδέντρο, αριστερότατος κόµβος (ελάχιστο στοιχείο) δεξιού υποδένδρου. ιαφορετικά, στο µονοπάτι από p προς ρίζα, πρώτος πατέρας επισκεπτόµενος από δείκτη σε αριστερό παιδί. οµές εδοµένων Επόµενος Χρόνος εκτέλεσης : Ο(ύψος) tnode *succ(tnode *p) { if (p->right!= NULL) { while (p->left!= NULL) p = p->left; tnode *q = p->par; while ((q!= NULL) && (p == q->right)) { p = q; q = p->par; } return(q); } οµές εδοµένων 11 Προηγούµενος Προηγούµενος κόµβου p στην inorder διέλευση. Αν p έχει (µη-κενό) αριστερό υποδέντρο, δεξιότατος κόµβος (µέγιστο στοιχείο) αριστερού υποδένδρου. ιαφορετικά, ψηλότερο υποδέντρο Τ για το οποίο p αριστερότατος κόµβος (ελάχιστο στοιχείο). Αν ρίζα Τ είναι ρίζα δέντρου, p πρώτος κόµβος. ιαφορετικά, ρίζα Τ είναι δεξί παιδί κόµβου q. Κόµβος q είναι προηγούµενος p. οµές εδοµένων

Προηγούµενος Αν p έχει (µη-κενό) αριστερό υποδέντρο, δεξιότατος κόµβος (µέγιστο στοιχείο) αριστερού υποδένδρου. ιαφορετικά, στο µονοπάτι από p προς ρίζα, πρώτος πατέρας επισκεπτόµενος από δείκτη σε δεξιό παιδί. οµές εδοµένων 13 Προηγούµενος Χρόνος εκτέλεσης : Ο(ύψος) tnode *pred(tnode *p) { if (p->left!= NULL) { p = p->left; while (p->right!= NULL) tnode *q = p->par; while ((q!= NULL) && (p == q->left)) { p = q; q = p->par; } return(q); } οµές εδοµένων 14 ιαγραφή Εντοπισµός κόµβου p µε αναζήτηση. Αν p έχει δύο παιδιά NULL-φύλλα, διαγράφεται. Αν p έχει ένα παιδί NULL-φύλλο, άλλο παιδί του p στη θέση του. ιαφορετικά, προηγούµενος (ή επόµενος) p στη θέση του. ιατηρείται ιδιότητα Α. οµές εδοµένων ιαγραφή int delete(int x) { tnode *p, *q, *z = search(x); if (z == NULL) return(not_found); if (z->left && z->right) { // 2 παιδιά -> 1 παιδί q = pred(z); // δεξιότατο αριστερού υποδέντρου z->key = q->key; z = q; } if (z->left) q = z->left; else q = z->right; p = z->par; if (q) q->par = p; if (z == root) root = q; else if (z == p->left) p->left = q; else p->right = q; free(z); return(ok); } οµές εδοµένων 16

Ύψος - Απόδοση 1 2 Χειρότερη περίπτωση : Γραµµικό ύψος Θ(n). Εισαγωγή 1, 2,, n Εισαγωγή n, n-1,, 2, 1 Εκφυλίζεται σε γραµµική λίστα. Γραµµικό κόστος λειτουργιών. Καλύτερη περίπτωση : Λογαριθµικό ύψος Ο(log n). Εισαγωγή τυχαίων στοιχείων : Λογαριθµικό ύψος Ο(log n). Ζυγισµένα δέντρα διορθώνουν χειρότερη περίπτωση. 3 4 5 6 8 9 Α περιέχει κάποιους αριθµούς από 1 έως 00. Αναζητούµε το 363. Ποια δεν µπορεί να προκύψουν; 2, 2, 401, 398, 3, 344, 39, 363 924, 2, 911, 244, 898, 8, 362, 363 9, 2, 911, 240, 9, 245, 363 2, 399, 38, 219, 266, 282, 381, 28, 363 9, 28, 34, 621, 299, 392, 8, 363 Έστω κόµβος p µε δύο παιδιά που δεν είναι NULL-φύλλα. succ(p) / pred(p) έχει αριστερό / δεξί παιδί NULL-φύλλο. Επιλογή (k-οστό µικρότερο στοιχείο) σε Α; Πλήθος στοιχείων στο αριστερό υποδέντρο + 1 (για τρέχον στοιχείο ρίζα υποδέντρου). Πεδίο LeftSize. οµές εδοµένων οµές εδοµένων 18 Ταξινόµηση µε εισαγωγή σε Α. Χρόνος εκτέλεσης; Εισαγωγή δεν είναι αντιµεταθετική. Εισαγωγή 1, 2, 3. Εισαγωγή 2, 1, 3. ιαγραφή δεν είναι αντιµεταθετική. Σβήνω 2 και µετά 1. Σβήνω 1 και µετά 2. 3 4 ιαγραφή µέγιστου (ελάχιστου). εξιότατος κόµβος έχει δεξί παιδί NULL-φύλλο. Είτε ρίζα είτε δεξί παιδί. void deletemax() { tnode *p, *q, *z = rightmost(); q = z->left; p = z->par; if (q) q->par = p; if (z == root) root = q; else p->right = q; free(z); } 38 οµές εδοµένων 19 οµές εδοµένων