ΠΝΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΣ ΔΔΟΜΝΩΝ ΚΙ ΛΓΟΡΙΘΜΟΙ ΗΜΡΟΜΗΝΙ: 14/11/2018 ΔΙΓΝΩΣΤΙΚΟ ΠΝΩ Σ ΔΝΔΡΙΚΣ ΔΟΜΣ ΚΙ ΓΡΦΟΥΣ Διάρκεια: 45 λεπτά Ονοματεπώνυμο:. ρ. Ταυτότητας:. ΒΘΜΟΛΟΓΙ ΣΚΗΣΗ ΒΘΜΟΣ ΒΘΜΟΣ ΦΟΙΤΗΤΗ 1 35 2 40 3 25 Bonus 10 ΣΥΝΟΛΙΚ 100
Άσκηση 1 (35 μονάδες) ) Ποιο από τα πιο κάτω είναι λάθος για το πιο κάτω δέντρο; i. ίναι ισοζυγισμένο ii. ίναι γεμάτο iii. ίναι ελαφρώς συνεκτικό iv. ίναι Δέντρο Δυαδικής ναζήτησης (ΔΔ) (5 μονάδες) Β) Ποιο θα είναι το αποτέλεσμα της πιο κάτω αναδρομικής συνάρτησης αν της περάσουμε ως όρισμα την ρίζα του πιο πάνω δέντρου; Void printtree (NODE *root){ if (root == NULL) return; } printtree(root->left); printtree(root->right); printf( %d, root->data); i. 12 22 26 24 28 34 35 36 40 49 55 ii. 12 24 26 28 22 34 35 36 40 49 55 iii. 12 24 28 26 22 35 40 36 55 49 34 iv. 12 22 24 26 28 34 35 36 40 49 55 (5 μονάδες)
Γ) Θέλουμε να εισάγουμε τους πιο κάτω χαρακτήρες σε ένα 2-3 δέντρο με την συγκεκριμένα σειρά:, Γ,, Π, Ω, Τ, Ο,, Π, Λ, 0, 3, 5 φαρμόστε την εισαγωγή κάθε χαρακτήρα και δείξτε καθαρά τις σειρές εισαγωγών των στοιχείων δείχνοντας όλα τα ενδιάμεσα αποτελέσματα. Υπενθυμίζεστε ότι σε περίπτωση ισότητας του εισαγόμενου στοιχείου με ένα κλειδί, η εισαγωγή γίνεται στα αριστερά. Η ταξινομημένη σειρά των χαρακτήρων είναι όπως φαίνεται πιο κάτω: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,, Β, Γ, Δ,, Ζ, Η, Θ, Ι, Κ, Λ, Μ, Ν, Ξ, Ο, Π, Ρ, Σ, Τ, Υ, Φ, Χ, Ψ, Ω (25 μονάδες) Γ Γ Π Γ Π Γ Ω Π Π Γ Τ Ω Γ Ο Τ Ω Π Γ Ο Τ Ω Π Γ Ο Π Τ Ω Ο Π Γ Λ Π Τ Ω A Ο Π 0 A Γ Λ Π Τ Ω 3 Ο Π 0 Γ Λ Π Τ Ω 3 Ο Π 0 5 Γ Λ Π Τ Ω Άσκηση 2 (40 μονάδες)
) Έστω το πιο κάτω δέντρο: Γράψτε τις πιο κάτω πληροφορίες: (1-11 παίρνουν από 1 μονάδα. 13+14 παίρνουν από 2 μονάδες) 1. Ύψος κόμβου 8: 4 2. Βάθος κόμβου 8: 1 3. Ύψος κόμβου 7: 2 4. Βάθος κόμβου 7: 3 5. Ύψος κόμβου 12: 1 6. Βάθος κόμβου 12: 4 7. Ύψος κόμβου 2: 0 8. Βάθος κόμβου 2: 5 9. Ύψος δέντρου: 4 10. Βάθος δέντρου: 5 11. Βαθμός δέντρου: 2 12. ίναι το δέντρο γεμάτο; Δικαιολογήστε την απάντηση σας. ν δεν είναι γεμάτο γράψτε τι πρέπει να γίνει για να θεωρηθεί γεμάτο.
Όχι,δεν έχουν όλοι οι εσωτερικοί 2 παιδιά. Πρέπει ο κόμβος 11 και ο κόμβος 12 να προσθέσουν 1 παιδί δεξιά τους για να γίνει γεμάτο. 13. ίναι το δέντρο τέλειο; Δικαιολογήστε την απάντηση σας. Όχι,δεν διότι δεν είναι γεμάτο ούτε ισοζυγισμένο (δηλαδή τα φύλλα να έχουν το ίδιο βάθος). (15 μονάδες) (Β) πό πόσους κόμβους χρειάζεται να περάσουμε για αν βρούμε ένα στοιχείο σε ένα Δυαδικό Δέντρο ναζήτησης (ΔΔ) και σε ένα 2-3 δέντρο; Γράψτε την καλύτερη και την χειρότερη περίπτωση. Σε ποιες περιπτώσεις το ένα πλεονεκτεί του άλλου; ξηγήστε την απάντηση σας. (10 μονάδες)
Γ) Περιγράψτε τον αλγόριθμο διάσχισης κατά πλάτος τους δυαδικού δένδρου αναζήτησης. Με ποια σειρά θα επεξεργαστεί ο αλγόριθμος διάσχισης κατά πλάτος (Breadth-first search - BFS) τους κόμβους του παρακάτω δέντρου; Γ) 60 41 74 16-53 65 25 46 55 63 70 42 62 64 (15 μονάδες) Ξεκινάμε από ρίζα κι έπειτα επισκεπτόμαστε όλα τα παιδιά της κατά σειρά. Έπειτα επαναλαμβάνουμε τα βήματα για όλους τους κόμβους κατά σειρά που βρίσκονται στο ίδιο βάθος μέχρι να επισκεφτούμε τελικά όλα τα φύλλα.
Άσκηση 3 (25 μονάδες) 1 2 4 3 5 6 7 A) Ποιες από τις πιο κάτω ιδιότητες ικανοποιεί ο γράφος στην Άσκηση 3; v. Συνεκτικός Γράφος (Connected Graph) vi. Ισχυρά Συνεκτικός Γράφος (Strongly Connected Graph vii. λαφρά Συνεκτικός Γράφος (Weakly Connected Graph) viii. Γράφος με Βάρη (Weighted Graph) ix. ραιός Γράφος (Sparse Graph) x. Πυκνός Γράφος (Dense Graph) (5 μονάδες)
B) Να δώσετε τον πίνακα και την λίστα γειτνίασης για τον ακόλουθο μηκατευθυνόμενο γράφο με 7 κορυφές. (20 μονάδες) 1 2 3 6 2 1 3 3 1 2 6 7 4 4 3 5 5 4 7 6 1 3 7 3 5 1 2 3 4 5 6 7 1 0 1 1 0 0 1 0 2 1 0 1 1 0 0 1 3 1 1 0 1 0 1 1 4 0 0 1 0 1 0 0 5 0 0 0 1 0 0 1 6 1 0 1 0 0 0 0 7 0 0 1 0 1 0 0
Bonus (10 μονάδες) Υλοποιήστε την συνάρτηση findsecondsmallest() η οποία δεδομένου της ρίζας ενός δυαδικού δένδρου αναζήτησης βρίσκει και επιστρέφει το κόμβο με την δεύτερη μικρότερη τιμή στο δένδρο. Το δένδρο έχει κόμβους που ορίζονται ως εξής: typedef struct node { int val; struct node* left; struct node* right; }NODE; Πρότυπο συνάρτησης που καλείστε να υλοποιήσετε: Παραδείγματα κόμβων με την 2 η μικρότερη τιμή:: NODE *findsecondsmallest(node *root); κόμβος 23 κόμβος 15 κόμβος 14
// A function to find 2nd smallest element in a given tree. void secondsmallestutil(node *root, int *c) { // Base cases, the second condition is important to // avoid unnecessary recursive calls if (root == NULL *c >= 2) return; // Follow reverse inorder traversal so that the // Smallest element is visited first secondsmallestutil(root->left, c); // Increment count of visited nodes (*c)++; // If c becomes k now, then this is the 2nd Smallest if (*c == 2) { printf("2nd Smallest element is %d\n",root->val); return; } } // Recur for right subtree secondsmallestutil(root->right, c); // Function to find 2nd Smallest element void secondsmallest(node *root) { // Initialize count of nodes visited as 0 int c = 0; } // Note that c is passed by reference secondsmallestutil(root, &c); /* A utility function to insert a new node with given val in BST */ Node* insert(node* node, int val) { /* If the tree is empty, return a new node */ if (node == NULL) return newnode(val); /* Otherwise, recur down the tree */ if (val < node->val) node->left = insert(node->left, val); else if (val > node->val) node->right = insert(node->right, val); } /* return the (unchanged) node pointer */ return node;
ΠΡΟΧΙΡΟ (ΠΡΔΙΔΤΙ ΜΖΙ Μ ΤΟ ΔΙΓΩΝΙΣΜ)