9-1 ΜΑΘΗΜΑ 9 ο Δυαδικά Δένδρα, Διάσχιση Δυαδικών Δένδρων Υλικό από τις σημειώσεις Ν. Παπασπύρου, 2006.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση.
Advertisements

Δυναμικοί πίνακες Πολλές δομές δεδομένων υλοποιούνται με χρήση πινάκων
Ανασκόπηση σε Δείκτες, Ουρές, Στοίβες, Συνδεδεμένες Λίστες
ΜΑΘΗΜΑ 7ο Κυκλικές και Διπλά Συνδεδεμένες Λίστες,
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι
Γλώσσα C & Unix Τμήμα Πληροφορικής, ΑΠΘ B’ εξάμηνο
Lab 3: Sorted List ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι18/10/2010.
Αναδρομη και static Γραψετε την συναρτηση sequence_size που διαβαζει μια απροσδιοριστου μεγεθους σειρας και υπολογιζει και τυπωνει το μεγεθος της. int.
ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΙΑΔΙΚΑΣΤΙΚΟ ΠΡΟΓΡΑΜMΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ – ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ.
Δομές Δεδομένων - Δυαδικά Δένδρα (binary trees)
Εντολες Επιλογης (Selection)
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων, Σημασιολογικές Ενέργειες.
11-1 ΜΑΘΗΜΑ 12 ο Γράφοι, Διάσχιση Γράφων Υλικό από τις σημειώσεις Ν. Παπασπύρου, 2006.
Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL
1Πέτρος ΣτεφανέαςΠρογραμματιστικές Τεχνικές ΓΡΑΦΟΙ (GRAPHS) ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Νίκος Παπασπύρου.
Υποθετικός τελεστής Ο υποθετικός τελεστής (?:) αποτελείται από δύο σύμβολα. Ανήκει στην κατηγορία των τελεστών που αποτελούνται από συνδυασμό συμβόλων.
Τελεστές (operators) – Εκφράσεις (expressions)
Δομές Αναζήτησης TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Χειριζόμαστε ένα σύνολο στοιχείων όπου το κάθε.
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι
Ε. ΠετράκηςΣτοίβες, Ουρές1 Στοίβες  Στοίβα: περιορισμένη ποικιλία λίστας  τα στοιχεία μπορούν να εισαχθούν ή να διαγραφούν μόνο από μια άκρη : λίστες.
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΘΠ06 - Μεταγλωττιστές Συντακτική Ανάλυση, Bison 1.
TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει.
6-1 ΜΑΘΗΜΑ 6 ο Ανασκόπηση σε Δείκτες, Συνδεδεμένες Λίστες, Ουρές, Στοίβες.
ΗΜΜΥ 111 ΔΟΜΗΜΕΝΟΣΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΩΣΤΑΣ ΚΟΝΤΟΓΙΑΝΝΗΣ Αναπληρωτής Καθηγητής Τμήμα ΗΜΜΥ Πολυτεχνείο Κρήτης.
Δομές Δεδομένων - Ισοζυγισμένα Δυαδικά Δένδρα (balanced binary trees)
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΗΥ150 – Προγραμματισμός Ξ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Δομές Δεδομένων.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι 8-1 Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: 2-3 Δένδρα, Υλοποίηση και πράξεις Β-δένδρα B-Δένδρα.
Lab 3: Sorted List ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι115/4/2015.
Λίστες παράλειψης (skip lists) TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ -150 Προγραμματισμός Αρχεία.
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι 4-1 Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Αναδρομικές συναρτήσεις Ισοζυγισμός Παρενθέσεων.
ΗΥ150 – ΠρογραμματισμόςΞ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Αρχεία.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
Δομές Δεδομένων και Αρχεία Ενότητα 7: Η δομή Στοίβα Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.
Δομές Δεδομένων και Αρχεία
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος.
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Προγραμματισμός ΗΥ Ενότητα 2: Συναρτήσεις Εισόδου ⁄ Εξόδου. Διδάσκων: Ηλίας Κ Σάββας, Αναπληρωτής Καθηγητής.
ΣΥΜΜΟΡΦΩΣΗ ΣΕ ΔΙΚΑΣΤΙΚΕΣ ΑΠΟΦΑΣΕΙΣ Εισηγητές: - Κωνσταντίνος Μπλάγας, Δ/νων Σύμβουλος ΔήμοςΝΕΤ - Καλλιόπη Παπαδοπούλου, Νομική Σύμβουλος ΔήμοςΝΕΤ.
«Διγλωσσία και Εκπαίδευση» Διδάσκων: Γογωνάς Ν. Φοιτήτρια: Πέτρου Μαρία (Α.Μ )
Π.Γ.Ε.Σ.Σ ΚΑΡΝΑΡΟΥ ΧΡΙΣΤΙΝΑ Β2ΘΡΗΣΚΕΥΤΙΚΑ ΚΕΦΑΛΑΙΟ 5 ΣΕΛΙΔΕΣ ΕΡΓΑΣΙΕΣ Α-Δ.
ΛΟΓΙΣΤΙΚΗ ΚΟΣΤΟΥΣ ΤΕΧΝΙΚΕΣ ΚΟΣΤΟΛΟΓΗΣΗΣ Αποφάσεις Βάσει Οριακής & Πλήρους Κοστολόγησης Α.Τ.Ε.Ι. ΚΡΗΤΗΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ ΑΠΟΦΑΣΕΙΣ ΒΑΣΕΙ ΟΡΙΑΚΗΣ.
Δένδρα & Ανίχνευση Πρώτη ανίχνευση σε βάθος. Δένδρα & Ανίχνευση Πρώτη ανίχνευση σε πλάτος –Level 0: 1 –Level 1: 2, 10, 11 –Level 2: 3, 9, 12, 14 –Level.
Υπεύθυνη καθηγήτρια: Ε. Γκόνου Μαθητές: Ρωμανός Πετρίδης, Βαγγέλης Πίπης Π.Γ.Ε.Σ.Σ ….Θανέειν πέπρωται άπασι.
ΦΟΡΟΛΟΓΙΚΟ ΔΙΚΑΙΟ Ι Συνυπολογισμός προηγούμενων δωρεών ή γονικών παροχών για σκοπούς φόρου κληρονομίας Διδάσκων καθηγητής: Α. Τσουρουφλής Εξηνταβελώνη.
Διδάσκων: Δρ. Τσίντζα Παναγιώτα
Διερεύνηση γραφήματος
Τεχνολογία και Προγραμματισμός Υπολογιστών
ΟΙ ΑΡΓΥΡΟΙ ΚΑΙ ΧΡΥΣΟΙ ΚΑΝΟΝΕΣ ΤΗΣ ΛΥΣΗΣ
Οι Αριθμοί … 5.
ΕΝΤΟΛΕΣ ΕΠΙΛΟΓΗΣ Η εντολή if if ( παράσταση) εντολή επόμενη εντολή.
Τεχνολογία και Προγραμματισμός Υπολογιστών
Δομές Αναζήτησης Χειριζόμαστε ένα σύνολο στοιχείων όπου το κάθε στοιχείο έχει ένα κλειδί από ολικά διατεταγμένο σύνολο Θέλουμε να υποστηρίξουμε δύο.
Σύστημα πρόσβασης στην Τριτοβάθμια Εκπαίδευση
Αναδρομή Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:
АНТИБИОТИКЛАРНИНГ ФАРМАКОЛОГИЯСИ т.ф.д., проф. Алиев Х.У Тошкент 2014
Μεταγράφημα παρουσίασης:

9-1 ΜΑΘΗΜΑ 9 ο Δυαδικά Δένδρα, Διάσχιση Δυαδικών Δένδρων Υλικό από τις σημειώσεις Ν. Παπασπύρου, 2006

9-2 Δυαδικά δένδρα(i) Binary trees Δυο σύνδεσμοι σε κάθε κόμβο –αριστερό και δεξί παιδί Κάθε κόμβος έχει 0, 1 ή 2 παιδιά Ρίζα: ο αρχικός κόμβος του δένδρου Φύλλα: κόμβοι χωρίς παιδιά Βάθος κόμβου: αριθμός συνδέσμων από τη ρίζα

9-3 Δυαδικά δένδρα(ii) Τύπος κόμβου TreeNode typedef struct TreeNode_tag { int data; struct TreeNode_tag * left; struct TreeNode_tag * right; } TreeNode; Τύπος tree typedef TreeNode * tree; Κενό δένδρο const tree treeEmpty = NULL;

9-4 Δυαδικά δένδρα(iii) Εισαγωγή σε δένδρα –Καθοριστική απόφαση: σε ποιο σημείο του δένδρου θα εισαχθεί ο νέος κόμβος –Ισοζυγισμένα δένδρα (balanced trees): το βάθος δυο φύλλων διαφέρει το πολύ κατά 1 Συνάρτηση μέγιστου βάθους int treeDepth (tree t) { if (t == NULL) return 0; return 1 + max(treeDepth(t->left), treeDepth(t->right)); }

9-5 Δυαδικά δένδρα(iv) Εισαγωγή σε ισοζυγισμένα δένδρα void treeBalancedInsert (tree * t, int d) { if (*t == NULL) { *t = (TreeNode *) malloc(sizeof(TreeNode)); if (*t == NULL) { printf("Out of memory\n"); exit(1); } (*t)->data = d; (*t)->left = (*t)->right = NULL; }

9-6 Δυαδικά δένδρα(v) Εισαγωγή σε ισοζυγισμένα δένδρα (συνέχεια) else { int d1 = treeDepth((*t)->left); int d2 = treeDepth((*t)->right); if (d1 <= d2) treeBalancedInsert( &((*t)->left), d); else treeBalancedInsert( &((*t)->right), d); }

9-7 Δένδρα γενικής μορφής Κάθε κόμβος k έχει n k απογόνους, όπου n k  Ν Κωδικοποίηση με δυαδικά δένδρα

9-8 Σειρά με την οποία διασχίζονται οι κόμβοι –κατά βάθος (depth first) –κατά πλάτος (breadth first) Διάσχιση δυαδικών δένδρων(i) Κατά βάθος 42, 10, 7, 14, 12, 30, 50, 55, 52 Κατά πλάτος 42, 10, 50, 7, 14, 55, 12, 30, 52

9-9 Διάσχιση δυαδικών δένδρων(ii) Εκτύπωση κατά βάθος –πολύ απλά, με χρήση αναδρομής Υλοποίηση void treePrintDF (tree t) { if (t != NULL) { printf("%d ", t->data); treePrintDF(t->left); treePrintDF(t->right); } }

9-10 Διάσχιση δυαδικών δένδρων(iii) Εκτύπωση κατά πλάτος –με τη βοήθεια ουράς για την αποθήκευση δεικτών προς τους κόμβους που δεν έχουμε επισκεφθεί Υλοποίηση void treePrintBF (tree t) { queue q = queueEmpty; if (t != NULL) queueInsert(&q, t);

9-11 Διάσχιση δυαδικών δένδρων(iv) Εκτύπωση κατά πλάτος, υλοποίηση (συνέχεια) while (!queueIsEmpty(q)) { TreeNode * n = queueRemove(&q); printf("%d ", n->data); if (n->left != NULL) queueInsert(&q, n->left); if (n->right != NULL) queueInsert(&q, n->right); }

9-12 Αριθμητικές εκφράσεις(i) Παράδειγμα 3 * (24 / 2) + (9 - 3) Παράσταση σε μορφή δυαδικού δένδρου –οι αριθμοί στα φύλλα –οι τελεστές στους υπόλοιπους κόμβους + *– / 9 Διάσχιση κατά βάθος

9-13 Αριθμητικές εκφράσεις(ii) Ενθεματική παράσταση –infix notation –ο τελεστής ανάμεσα στα τελούμενα –διφορούμενη: χρειάζονται παρενθέσεις –η συνήθης μορφή για τον άνθρωπο Αποτέλεσμα (3 * (24 / 2)) + (9 - 3) + *– / 9

9-14 Αριθμητικές εκφράσεις(iii) Προθεματική παράσταση –prefix notation –ο τελεστής πριν τα τελούμενα –όχι διφορούμενη, δε χρειάζονται παρενθέσεις –απλή μηχανική ανάγνωση Αποτέλεσμα + * 3 / *– / 9

9-15 Αριθμητικές εκφράσεις(iv) Επιθεματική παράσταση –postfix notation –ο τελεστής μετά τα τελούμενα –όχι διφορούμενη, δε χρειάζονται παρενθέσεις –απλή μηχανική αποτίμηση Αποτέλεσμα / * *– / 9

9-16 Υλοποίηση αριθμητικών εκφράσεων Έκφραση: δυαδικό δένδρο ειδικής μορφής Κόμβοι δύο ειδών: –αριθμητικές σταθερές (φύλλα) –τελεστές (με δύο τελούμενα) Πληροφορία: –τιμή σταθεράς, ή –σύμβολο τελεστή Σύνδεσμοι: –τελούμενα

9-17 Κόμβος δένδρου typedef struct ExprNode_tag { enum { EXP_const, EXP_binop } code; union { double constant; struct { char op; struct ExprNode_tag *arg1, *arg2; } binop; } data; } ExprNode, *expr; code data constant ή binop op arg1 arg2

9-18 Κατασκευή σταθερών expr exprConst (double constant) { ExprNode * e = (ExprNode *) malloc(sizeof(ExprNode)); if (e == NULL) { printf("Out of memory\n"); exit(1); } e->code = EXP_const; e->data.constant = constant; return e; } code data constant ή binop op arg1 arg2

9-19 Κατασκευή εκφράσεων με τελεστή expr exprBinop (expr arg1, char op, expr arg2) { ExprNode * e = (ExprNode *) malloc(sizeof(ExprNode)); if (e == NULL) { printf("Out of memory\n"); exit(1); } e->code = EXP_binop; e->data.binop.op = op; e->data.binop.arg1 = arg1; e->data.binop.arg2 = arg2; return e; } code data constant ή binop op arg1 arg2

9-20 Παράδειγμα κατασκευής Έκφραση: 3 * (24 / 2) + (9 - 3) + *– / 9 expr e = exprBinop( exprConst(3),'*', exprBinop( exprConst(24), '/', exprConst(2) ) ), '+', exprBinop( exprConst(9), '-', exprConst(3) ) );

9-21 Καταστροφή έκφρασης void exprFree (expr e) { switch (e->code) { case EXP_binop: exprFree(e->data.binop.arg1); exprFree(e->data.binop.arg2); break; } free(e); } code data constant ή binop op arg1 arg2

9-22 Εκτύπωση έκφρασης void exprPrint (expr e) { switch (e->code) { case EXP_const: printf("%lg", e->data.constant); break; case EXP_binop: printf("("); exprPrint(e->data.binop.arg1); printf("%c", e->data.binop.op); exprPrint(e->data.binop.arg2); printf(")"); break; } code data constant ή binop op arg1 arg2

9-23 Υπολογισμός έκφρασης double exprCalc (expr e) { switch (e->code) { case EXP_const: return e->data.constant; case EXP_binop: switch (e->data.binop.op) { case '+': return exprCalc(e->data. binop.arg1) + exprCalc(e->data. binop.arg2); case '-':...