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

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

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

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

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

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

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

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

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

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

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

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

Διάλεξη 20: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εργαστήριο 2: Πίνακες

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

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

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

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

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

Χαρακτηριστικά αναδροµής

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

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

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

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

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

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

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

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

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

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

Διάλεξη 15: Αναδρομή (Recursion)

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

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

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

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

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

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

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

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

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

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

Εργαστήριο 9: Αρχεία

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

AVL-trees C++ implementation

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

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

#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("*");

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

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

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

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

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

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

Εισαγωγή στον Προγραμματισμό

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

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

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

Διάλεξη 15: Αναδρομή (Recursion)

Εργαστήριο 7: Ο αλγόριθμος ταξινόμησης Radix Sort

Transcript:

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

Επανάληψη Αναδρομής Βασική έννοια στα Μαθηματικά και στην Πληροφορική. Στην πληροφορική η αναδρομή χρησιμοποιείται σαν τεχνική προγραμματισμού και σαν μέθοδος σχεδιασμού αλγορίθμων. Στον προγραμματισμό η αναδρομή εμφανίζεται με την κλήση ενός υποπρογράμματος από τον εαυτό του. Ένα αναδρομικό υποπρόγραμμα αποτελείται από: ένα βήμα τερματισμού, όπου ορίζεται η εκτέλεση του υποπρογράμματος για κάποιες μικρές τιμές των παραμέτρων του, και ένα αναδρομικό βήμα, κατά το οποίο η εκτέλεση του υποπρογράμματος ορίζεται ως συνδυασμός κλήσεων του υποπρογράμματος σε άλλες μικρότερες τιμές των παραμέτρων. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 2

Παράδειγμα 1: Παραγοντικός Αριθμός με Αναδρομή Ας ορίσουμε τώρα τον αναδρομικό ορισμό της factorial. 0!=1, 1!=1 2!=1x2=2 3!=1x2x3=6 4!=1x2x3x4=24 5!=1x2x3x4x5=120 Ας ορίσουμε τώρα τον αναδρομικό ορισμό της factorial. Αναδρομικός Ορισμός συνάρτησης <factorial> Βήμα Τερματισμού:0! = 1 Αναδρομικό Βήμα: n! = n x (n-1)! ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 3

Παραγοντικός Αριθμός με Αναδρομή int factorial ( int n ) { if (n == 0) return 1; else Βήµα Τερµατισµού return n x factorial(n-1); } 2 1 Εκτέλεση factorial(2) return 2 Εκτέλεση factorial(1) factorial(1); 1 return 1 factorial(0); Εκτέλεση factorial(0) return 1 Αναδροµικό Βήµα 6 Εκτέλεση factorial(3) return 3 factorial(2); ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 4

Δυαδικό Δέντρο Αναζήτησης με Αλφαβητική Σειρά Μετά από εισαγωγή του D, C, F, H Τι διαφέρει αν αρχίζαµε από την αρχή καιη σειρά εισαγωγής ήταν: D,2 C,0 F,1 1. D, F, C, H 2. D, C, H, F 3. C, D, F, H H,0 char, int Ακέραιος αριθµός που αντιπροσωπεύει το ύψος του κόµβο. Ένας χαρακτήρας του αγγλικού αλφαβήτου ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 5

ΠΑΡΑΔΕΙΓΜΑ ΕΚΤΕΛΕΣΗΣ Εισαγωγή των κόμβων D,C,F,H,A,E,B,G Εισαγωγή του κόμβου: D D,0 ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 6

Εισαγωγή του κόμβου C D,1 C,0 ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 7

Εισαγωγή του κόμβου F D,1 C,0 F,0 ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 8

Εισαγωγή του κόμβου H D,2 C,0 F,1 H,0 ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 9

Εισαγωγή του κόμβου A D,2 C,1 F,1 A,0 H,0 ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 10

Εισαγωγή του κόμβου E D,2 C,1 F,1 A,0 E,0 H,0 ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 11

Εισαγωγή του κόμβου B D,3 C,2 F,1 A,1 E,0 H,0 B,0 ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 12

Εισαγωγή του κόμβου G D,3 C,2 F,2 A,1 E,0 H,1 B,0 G,0 ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 13

Υλοποίηση ΔΔΑ Δομές που θα χρειαστείτε: //The tnode data structure typedef struct tnode{ char name; //το όνομα του κόμβου int height; //το ύψος του κόμβου struct tnode *left; //Το αριστερό παιδί struct tnode *right; //Το δεξί παιδί }tnode; typedef struct tnode *Tnode; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 14

Συναρτήσεις που πρέπει να υλοποιήσετε int max(tnode left, Tnode right); επιστρέφει το μέγιστο ύψος 2 υποδένδρων Tnode Insert(Tnode t, char c); εισάγει ένα καινούριο κόμβο με το όνομα c στο δέντρο t στην σωστή θέση και επιστρέφει την ανάθεση αυτή void printtree(tnode t); τυπώνει το δέντρο t. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 15

Λύσεις 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; } ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 16

Λύσεις(συν.) 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; } ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 17

Λύσεις(συν.) 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{ //Move to the right 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; } } } ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 18

Λύσεις(συν.) 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); } } ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 19

Λύσεις(συν.) 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"); } ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 20

Εναλλακτική Λύση Insert με void void Insert(tnode **t, char c){ if(*t==null){ (*t)=(tnode *) malloc( sizeof( tnode ) ); (*t)->height=0; (*t)->left=null; (*t)->right=null; (*t)->name=c; }else if((*t)->name > c){ Insert(&((*t)->left),c); (*t)->height= max((*t)->left,(*t)->right)+1; }else if((*t)->name < c){ Insert(&((*t)->right),c); (*t)->height= max((*t)->left,(*t)->right)+1; } } ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 21