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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

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

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

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

Διάλεξη 18: B-Δένδρα

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

Συγκρίσιμα Αντικείμενα (comparable)

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

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

AVL-trees C++ implementation

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

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

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

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

Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα)

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

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

Διάλεξη 22η: Επιπλέον στοιχεία της C

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

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

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

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

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

Στοίβες με Δυναμική Δέσμευση Μνήμης

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

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

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

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

1 η ΑΣΚΗΣΗ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ. Ακ. έτος , 5ο Εξάμηνο, Σχολή ΗΜ&ΜΥ

Περιεχόμενα. Πρόλογος... 21

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

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

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

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

Προγραμματισμός Αναδρομή

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

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

Διάλεξη 11: Φροντιστήριο για Στοίβες. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

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

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

Εργαστήριο 5: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Διπλά Συνδεδεμένη Λίστα

Προγραμματισμός Δομές Δεδομένων

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

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

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

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

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

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

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

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

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

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

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

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

Προγραμματισμός Αναδρομή

Κατηγορίες Συμπίεσης. Συμπίεση με απώλειες δεδομένων (lossy compression) π.χ. συμπίεση εικόνας και ήχου

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

Δομές Δεδομένων - Εργαστήριο 5. Ουρές Προτεραιότητας

Εισαγωγή στον Προγραμματισμό (με. τη C)

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

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

Κεφάλαιο 10 Ψηφιακά Λεξικά

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα:

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

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

Υλοποίηση Λιστών. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Transcript:

EPL231: Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά Αναδρομή Η αναδρομή εμφανίζεται όταν μία διεργασία καλεί τον εαυτό της Υπάρχουν δύο μέρη Μία τερματική κατάσταση π.χ. i==0 Μία αναδρομική κατάσταση όπου η διεργασία καλεί τον εαυτό της με διαφορετικούς παραμέτρους 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 2

Παράδειγμα αναδρομής Ησυνάρτησηint power(int x, int pow) Επιτρέπεται μόνο η χρήση του πολλαπλασιασμού Επιστρέφει το x pow Ησκέψη x 0 =1 x 2 =x x (x 1 x 1 ) x 5 =x x x x x (x 4 x) 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 3 Παράδειγμα αναδρομής (συνέχεια) Ποια είναι η τερματική κατάσταση; pow==0 όπου η συνάρτηση επιστρέφει 1 Άρα κάπου στον κώδικα θα υπάρχει ιf(pow==0) return 1; Ποια είναι η αναδρομική κατάσταση; pow!=0, τι γίνεται σε αυτή την περίπτωσή; Πρέπει με κάποιο τρόπο να φτάσουμε στο pow=0. Αυτό γίνεται π.χ. αν αφαιρούμε 1 από το pow κάθε φορά 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 4

Παράδειγμα αναδρομής (συνέχεια) Άρα κάπου θα έχουμε κάλεσμα της συνάρτησης με pow-1 Δεδομένο: κάθε φορά θέλουμε να πολλαπλασιάζουμε το x. Βάζοντας μαζί ότι σκεφτήκαμε: int power(int x, int pow){ ιf(pow==0) return 1; else return x*power( x, (pow-1) ) 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 5 Power(3, 4) Return 3*power(3,(4-1)) power(3,(4-1)) Return 3*power(3, 2) Return 3*power(3,3) Return 3* 3*power(3, 2) Return 3* 3*3*power(3, 1) Return 3*3*3*3*power(3, 0) 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 6

Δυαδικό Δέντρο Αναζήτησης με Αλφαβητική Σειρά ΜετάαπόεισαγωγήτουD, C, F, H Τι διαφέρει αν αρχίζαμε από την αρχή και η σειρά εισαγωγής ήταν: 1. D, F, C, H 2. D, C, H, F 3. C, D, F, H D,2 C,0 F,1 H,0 char, int Ένας χαρακτήρας του αγγλικού αλφαβήτου Ακέραιος αριθμός που αντιπροσωπεύει το ύψος του κόμβο. 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 7 ΠΑΡΑΔΕΙΓΜΑ ΕΚΤΕΛΕΣΗΣ Εισαγωγή των κόμβων D,C,F,H,A,E,B,G

Εισαγωγή των κόμβων D,C,F,H,A,E,B,G Εισαγωγή του κόμβου D D,0 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 9 Εισαγωγή των κόμβων D,C,F,H,A,E,B,G Εισαγωγή του κόμβου C D,1 C,0 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 10

Εισαγωγή των κόμβων D,C,F,H,A,E,B,G Εισαγωγή του κόμβου F D,1 C,0 F,0 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 11 Εισαγωγή των κόμβων D,C,F,H,A,E,B,G Εισαγωγή του κόμβου H D,2 C,0 F,1 H,0 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 12

Εισαγωγή των κόμβων D,C,F,H,A,E,B,G Εισαγωγή του κόμβου A D,2 C,1 F,1 A,0 H,0 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 13 Εισαγωγή των κόμβων D,C,F,H,A,E,B,G Εισαγωγή του κόμβου E D,2 C,1 F,1 A,0 E,0 H,0 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 14

Εισαγωγή των κόμβων D,C,F,H,A,E,B,G Εισαγωγή του κόμβου B D,3 C,2 F,1 A,1 E,0 H,0 B,0 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 15 Εισαγωγή των κόμβων D,C,F,H,A,E,B,G Εισαγωγή του κόμβου G D,3 C,2 F,2 A,1 E,0 H,1 B,0 G,0 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 16

Δομές (Structures) typedef struct tnode{ char name; int height; struct tnode *left; //Το αριστερό παιδί struct tnode *right; //Το δεξί παιδί tnode; typedef struct tnode *Tnode; //το όνομα του κόμβου //το ύψος του κόμβου 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 17 Συναρτήσεις για υλοποίηση int max(tnode left, Tnode right) επιστρέφει το μέγιστο ύψος 2 υποδένδρων Tnode Insert(Tnode t, char c) εισάγει ένα καινούριο κόμβο με το όνομα c στο δέντρο t στην σωστή θέση και επιστρέφει την ανάθεση αυτή void printtree(tnode t) τυπώνει το δέντρο t. 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 18

max If left==null && right==null Else If left==null && right!=null Else If left!=null && right==null 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 19 Λύσεις Δομή //The Binary Tree structure typedef struct tnode{ int height; char name; struct tnode *left; struct tnode *right; tnode; //Pointer to the tree structure typedef struct tnode *Tree; 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 20

Λύσεις συναρτήσεων int max(tree left, Tree right){ if(left==null && right==null) return 0; if(left==null) return right->height; if(right==null) return left->height; if(left->height < right->height) return right->height; else return left->height; 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 21 Λύσεις συναρτήσεων (συνέχεια) Tree Insert(Tree t, char c){ if(t==null){ //Initialize a new node printf("inserting new node (%c:0).\n", c); t = (tree*) malloc ( sizeof( tree ) ); t->height=0; t->name = c; t->left = NULL; t->right = NULL; return t; 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 22

Λύσεις συναρτήσεων (συνέχεια) else{ printf("current Node\nName: %c\nheight: %d\n", t->name, t->height); if(c < t->name){ //Move to the left printf("moving to the left of node (%c:%d)\n", t->name, t->height); t->left = Insert(t->left, c); else{ //Movetotheright printf("moving to the right of node (%c:%d)\n", t->name, t->height); t->right = Insert(t->right, c); //Set the height t->height = 1 + max(t->left, t->right); return t; 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 23 Λύσεις συναρτήσεων (συνέχεια) void printtree(tree t, int h){ int i; if(t!=null){ printtree(t->left, h-1); for(i=0; i<h*10; i++) printf(" "); printf("(%c:%d)\n", t->name, t->height); printtree(t->right, h-1); 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 24

Λύσεις συναρτήσεων (συνέχεια) Βοηθητική συνάρτηση void InsertNewNode(Tree t, char c){ printf("trying to insert new node with name [%c]\n", c); root = Insert(root, c); printf("done\n\n"); 1/3/2010 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 25 The End