Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου"— Μεταγράφημα παρουσίασης:

1 ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος (maistros@cs.ntua.gr) Στάθης Ζάχος (zachos@cs.ntua.gr) Νίκος Παπασπύρου (nickie@softlab.ntua.gr) http://www.softlab.ntua.gr/~nickie/Courses/progtech/ 1Νίκος ΠαπασπύρουΠρογραμματιστικές Τεχνικές Διαφάνειες παρουσίασης #8 (β) 4 Δένδρα γενικής μορφής 4 Διάσχιση δυαδικών δένδρων 4 Αριθμητικές εκφράσεις 4 Δυαδικά δένδρα αναζήτησης

2 2Νίκος ΠαπασπύρουΠρογραμματιστικές Τεχνικές Δένδρα γενικής μορφής u Κάθε κόμβος k έχει n k απογόνους, όπου n k  Ν 1 234 65 7 u Κωδικοποίηση με δυαδικά δένδρα 1 2 3 4 5 7 6

3 3Νίκος ΠαπασπύρουΠρογραμματιστικές Τεχνικές u Σειρά με την οποία διασχίζονται οι κόμβοι l κατά βάθος (depth first) l κατά πλάτος (breadth first) Διάσχιση δυαδικών δένδρων(i) 42 1050 755 523012 14 u Κατά βάθος 42, 10, 7, 14, 12, 30, 50, 55, 52 u Κατά πλάτος 42, 10, 50, 7, 14, 55, 12, 30, 52

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

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

6 6Νίκος ΠαπασπύρουΠρογραμματιστικές Τεχνικές Διάσχιση δυαδικών δένδρων(iv) u Εκτύπωση κατά πλάτος, υλοποίηση (συνέχεια) 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); } }

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

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

9 9Νίκος ΠαπασπύρουΠρογραμματιστικές Τεχνικές Αριθμητικές εκφράσεις(iii) u Προθεματική παράσταση l prefix notation l ο τελεστής πριν τα τελούμενα l όχι διφορούμενη, δε χρειάζονται παρενθέσεις l απλή μηχανική ανάγνωση u Αποτέλεσμα + * 3 / 24 2 - 9 3 + *– 33 224 / 9

10 10Νίκος ΠαπασπύρουΠρογραμματιστικές Τεχνικές Αριθμητικές εκφράσεις(iv) u Επιθεματική παράσταση l postfix notation l ο τελεστής μετά τα τελούμενα l όχι διφορούμενη, δε χρειάζονται παρενθέσεις l απλή μηχανική αποτίμηση u Αποτέλεσμα 3 24 2 / * 9 3 - + + *– 33 224 / 9

11 11Νίκος ΠαπασπύρουΠρογραμματιστικές Τεχνικές Δυαδικά δένδρα αναζήτησης(i) u Binary search trees u Δυαδικά δένδρα με τις παρακάτω ιδιότητες για κάθε κόμβο: l όλοι οι κόμβοι του αριστερού παιδιού έχουν τιμές μικρότερες ή ίσες της τιμής του κόμβου l όλοι οι κόμβοι του δεξιού παιδιού έχουν τιμές μεγαλύτερες ή ίσες της τιμής του κόμβου 10 534 58 71 17

12 12Νίκος ΠαπασπύρουΠρογραμματιστικές Τεχνικές Δυαδικά δένδρα αναζήτησης(ii) u Τα δυαδικά δένδρα αναζήτησης διευκολύνουν την αναζήτηση στοιχείων u Αναδρομική αναζήτηση l αν η τιμή που ζητείται είναι στη ρίζα, βρέθηκε l αν είναι μικρότερη από την τιμή της ρίζας, αρκεί να αναζητηθεί στο αριστερό παιδί l αν είναι μεγαλύτερη από την τιμή της ρίζας, αρκεί να αναζητηθεί στο δεξί παιδί u Κόστος αναζήτησης: O(log n) l υπό την προϋπόθεση το δένδρο να είναι ισοζυγισμένο

13 13Νίκος ΠαπασπύρουΠρογραμματιστικές Τεχνικές Δυαδικά δένδρα αναζήτησης(iii) u Αναζήτηση TreeNode * treeSearch (tree t, int key) { if (t == NULL) return NULL; /* not found */ if (t->data == key) return t; /* found */ if (t->data > key) return treeSearch(t->left, key); else return treeSearch(t->right, key); }


Κατέβασμα ppt "ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google