ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Ε. ΠετράκηςΛίστες1  Λίστα: πεπερασμένη σειρά στοιχείων ίδιου τύπου  Οι πράξεις εξαρτώνται από τον τύπο της λίστας και όχι από τον τύπο δεδομένων  Λίστα:
Advertisements

Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση.
POINTERS, AGGREGATION, COMPOSITION. POINTERS TO OBJECTS.
ΜΑΘΗΜΑ 7ο Κυκλικές και Διπλά Συνδεδεμένες Λίστες,
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι
Γλώσσα C & Unix Τμήμα Πληροφορικής, ΑΠΘ B’ εξάμηνο
Lab 3: Sorted List ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι18/10/2010.
Διακριτά Μαθηματικά ΙI Δυαδικά Δέντρα Αναζήτησης
Δομές Δεδομένων - Δυαδικά Δένδρα (binary trees)
11-1 ΜΑΘΗΜΑ 12 ο Γράφοι, Διάσχιση Γράφων Υλικό από τις σημειώσεις Ν. Παπασπύρου, 2006.
Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL
1Πέτρος ΣτεφανέαςΠρογραμματιστικές Τεχνικές ΓΡΑΦΟΙ (GRAPHS) ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Νίκος Παπασπύρου.
Ισορροπημένα Δένδρα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μπορούμε να επιτύχουμε χρόνο εκτέλεσης για.
Δομές Αναζήτησης TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Χειριζόμαστε ένα σύνολο στοιχείων όπου το κάθε.
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι
Διδάσκων: Παύλος Παυλικκάς1 Ολυμπιάδα Πληροφορικής Γράφοι – Διάσχιση.
Ε. ΠετράκηςΣτοίβες, Ουρές1 Στοίβες  Στοίβα: περιορισμένη ποικιλία λίστας  τα στοιχεία μπορούν να εισαχθούν ή να διαγραφούν μόνο από μια άκρη : λίστες.
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ
Δυναμικη Δεσμευση Μνημης Συνδεδεμενες Λιστες (dynamic memory allocation, linked lists) Πως υλοποιουμαι προγραμματα που δεν γνωριζουμε πριν την εκτελεση.
TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει.
Διερεύνηση γραφήματος. Ένας αλγόριθμος διερεύνησης γραφήματος επισκέπτεται τους κόμβους του γραφήματος με μια καθορισμένη στρατηγική, π.χ. κατά εύρος.
TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει.
ΗΜΜΥ 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:
Παράδειγμα B + -Tree Υποθέτουμε B + -Tree τάξης 3 (α=2, b=3)  Κάθε φύλλο θα έχει 2 ως 3 το πολύ στοιχεία  Κάθε εσωτερικός κόμβος θα έχει 2 ως 3 το πολύ.
1 ΤΜΗΜΑ ΜΠΕΣ Αλγόριθμοι Αναζήτησης Εργασία 1 Τυφλή Αναζήτηση.
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
9-1 ΜΑΘΗΜΑ 9 ο Δυαδικά Δένδρα, Διάσχιση Δυαδικών Δένδρων Υλικό από τις σημειώσεις Ν. Παπασπύρου, 2006.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι 4-1 Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Αναδρομικές συναρτήσεις Ισοζυγισμός Παρενθέσεων.
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:
7-1 ΜΑΘΗΜΑ 7 ο Περισσότερα για Κυκλικές και Διπλά Διασυνδεόμενες Λίστες, Συναρτήσεις Βιβλιοθήκης, Διαχείριση Αρχείων.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
Δομές Δεδομένων και Αρχεία Ενότητα 7: Η δομή Στοίβα Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.
Δομές Δεδομένων και Αρχεία Ενότητα 10: Κυκλικά και Διπλά Συνδεδεμένη Λίστα Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I.
Δομές Δεδομένων και Αρχεία
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΤΕΙ ΚΕΝΤΡΙΚΗΣ ΜΑΚΕΔΟΝΙΑΣ ΣΕΡΡΕΣ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Τ.Ε. Πτυχιακή εργασία Μάρθα Τσολακίδου.
Δένδρα & Ανίχνευση Πρώτη ανίχνευση σε βάθος. Δένδρα & Ανίχνευση Πρώτη ανίχνευση σε πλάτος –Level 0: 1 –Level 1: 2, 10, 11 –Level 2: 3, 9, 12, 14 –Level.
Γράφημα Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα:
Διδάσκων: Δρ. Τσίντζα Παναγιώτα
Διδάσκων: Δρ. Τσίντζα Παναγιώτα
Διερεύνηση γραφήματος
EPL231 – Data Structures and Algorithms
EPL231 – Data Structures and Algorithms
Ουρά Προτεραιότητας (priority queue)
Δομές Αναζήτησης Χειριζόμαστε ένα σύνολο στοιχείων όπου το κάθε στοιχείο έχει ένα κλειδί από ολικά διατεταγμένο σύνολο Θέλουμε να υποστηρίξουμε δύο.
14η Διάλεξη Δέντρα Δυαδικής Αναζήτησης Ε. Μαρκάκης
מבני נתונים ויעילות אלגוריתמים
Αναδρομή Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:
Δομές Δεδομένων (Data Structures)
Μεταγράφημα παρουσίασης:

ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Διαφάνειες παρουσίασης #11 4 Διπλά συνδεδεμένες λίστες 4 Δυαδικά δένδρα 4 Διάσχιση δένδρων 4 Παράσταση αριθμητικών εκφράσεων

2Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Διπλά συνδεδεμένες λίστες(i) firstlast u Doubly linked lists u Δυο σύνδεσμοι σε κάθε κόμβο l προς τον επόμενο κόμβο l προς τον προηγούμενο κόμβο

3Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Διπλά συνδεδεμένες λίστες(ii) u Τύπος κόμβου DListNode typedef struct DListNode_tag { int data; struct DListNode_tag * next; struct DListNode_tag * prev; } DListNode; u Τύπος dlist typedef struct { DListNode * first; DListNode * last; } dlist; u Άδεια λίστα const dlist dlistEmpty = { NULL, NULL };

4Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Διπλά συνδεδεμένες λίστες(iii) u Εισαγωγή στοιχείου στην αρχή void dlistInsert (dlist * lp, int t) { DListNode * n = (DListNode *) malloc(sizeof(DListNode)); if (n == NULL) { fprintf(stderr, "Out of memory\n"); exit(1); } n->data = t;

5Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Διπλά συνδεδεμένες λίστες(iv) u Εισαγωγή στοιχείου στην αρχή (συνέχεια) if (lp->first == NULL) { n->prev = n->next = NULL; lp->first = lp->last = n; } else { n->prev = NULL; n->next = lp->first; lp->first->prev = n; lp->first = n; } }

6Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Δυαδικά δένδρα(i) u Binary trees u Δυο σύνδεσμοι σε κάθε κόμβο l αριστερό και δεξί παιδί u Κάθε κόμβος έχει 0, 1 ή 2 παιδιά u Ρίζα: ο αρχικός κόμβος του δένδρου u Φύλλα: κόμβοι χωρίς παιδιά u Βάθος κόμβου: αριθμός συνδέσμων από τη ρίζα

7Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Δυαδικά δένδρα(ii) u Τύπος κόμβου TreeNode typedef struct TreeNode_tag { int data; struct TreeNode_tag * left; struct TreeNode_tag * right; } TreeNode; u Τύπος tree typedef TreeNode * tree; u Κενό δένδρο const tree treeEmpty = NULL;

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

9Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Δυαδικά δένδρα(iv) u Εισαγωγή σε ισοζυγισμένα δένδρα void treeBalancedInsert (tree * t, int d) { if (*t == NULL) { *t = (TreeNode *) malloc(sizeof(TreeNode)); if (*t == NULL) { fprintf(stderr, "Out of memory\n"); exit(1); } (*t)->data = d; (*t)->left = (*t)->right = NULL; }

10Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Δυαδικά δένδρα(v) u Εισαγωγή σε ισοζυγισμένα δένδρα (συνέχεια) else { int d1 = treeDepth((*t)->left); int d2 = treeDepth((*t)->right); if (d1 <= d2) treeBalancedInsert( &((*t)->left), d); else treeBalancedInsert( &((*t)->right), d); } }

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

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

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

14Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Διάσχιση δυαδικών δένδρων(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); } }

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

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

17Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Αριθμητικές εκφράσεις(iii) u Προθεματική παράσταση l prefix notation l ο τελεστής πριν τα τελούμενα l όχι διφορούμενη, δε χρειάζονται παρενθέσεις l απλή μηχανική ανάγνωση u Αποτέλεσμα + * 3 / *– / 9

18Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Αριθμητικές εκφράσεις(iv) u Επιθεματική παράσταση l postfix notation l ο τελεστής μετά τα τελούμενα l όχι διφορούμενη, δε χρειάζονται παρενθέσεις l απλή μηχανική αποτίμηση u Αποτέλεσμα / * *– / 9