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

Σχετικά έγγραφα
ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Αναδρομή Ανάλυση Αλγορίθμων

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

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

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

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

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

Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις

Βασικές οµές εδοµένων

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

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

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

Βασικές Δομές Δεδομένων

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

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

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

Αναδροµή (Recursion) ύο παρεξηγήσεις. Σκέψου Αναδροµικά. Τρίγωνο Sierpinski Μη αναδροµικός ορισµός;

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

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

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

Επαγωγή και αναδρομή για άκυκλα συνεκτικά γραφήματα

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

Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις

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

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

υναµικές οµές εδοµένων

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

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

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

Προγραµµατισµός. Αναδροµή (1/2)

Επαγωγή και αναδρομή για συνεκτικά γραφήματα

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναδροµικές Συναρτήσεις Χειµερινό Εξάµηνο 2014

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

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

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

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

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

Δομές Δεδομένων (Data Structures)

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

for for for for( . */

Βασικές Έννοιες Δοµών Δεδοµένων

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

Απλοποιεί τα γεγονότα έτσι ώστε να περιγράφει τι έχει γίνει και όχι πως έχει γίνει.

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 9: Αναδρομή

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

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

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

Sheet2. - Άσκηση 1 οκ - Άσκηση 2 οκ. Σκέψου πώς θα µπορούσες να την

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

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

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

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

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

h/2. Άρα, n 2 h/2-1 h 2log(n+1). Πως υλοποιούµε τη LookUp()? Πολυπλοκότητα?

Δέντρα (Trees) - Ιεραρχική Δομή

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

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

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to

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

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης

ιαφάνειες παρουσίασης #11

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

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

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

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

Οι βασικές πράξεις που ορίζουν τον ΑΤ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:

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

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

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

Ορισµός. Εστω συναρτήσεις: f : N R και g : N R. η f(n) είναι fi( g(n) ) αν υπάρχουν σταθερές C 1, C 2 και n 0, τέτοιες ώστε:

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

Στοιχεία Αλγορίθµων και Πολυπλοκότητας

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

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

Το Πρόβληµα Οµοφωνίας Σύγχρονα Συστήµατα Μεταβίβασης Μηνύµατος Μοντέλο Κατάρρευσης (crash model) Οι διεργασίες µπορούν να σταµατούν να εκτελούνται σε

3 ΑΝΑ ΡΟΜΗ ΑΝΑΖΗΤΗΣΗ - ΤΑΞΙΝΟΜΗΣΗ. n! = 1*2*3*..(n-1)*n. n! = 1 αν n = 0, = n*(n-1)! αν n > ΑΝΑ ΡΟΜΗ Εισαγωγή

Δυναμικός προγραμματισμός για δέντρα

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ Η/Υ ΠΡΩΤΗ ΠΡΟΟΔΟΣ ΣΤΗΝ «ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Y»

Transcript:

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

Αναδροµή Βασική έννοια στα Μαθηµατικά και στην Πληροφορική. Παράδειγµα: αναδροµικός ορισµός του παραγοντικού ενός µη αρνητικού ακεραίου: 0! = 1 n! = n (n-1)!, n > 0 Στην πληροφορική η αναδροµή χρησιµοποιείται σαν εργαλείο για τον ορισµό ενός ΑΤ, σαν µέθοδος σχεδιασµού αλγορίθµων και σαν τεχνική προγραµµατισµού. Στον προγραµµατισµό η αναδροµή εµφανίζεται µε την κλήση ενός υποπρογράµµατος από τον εαυτό του. Ένα αναδροµικό υποπρόγραµµα αποτελείται από: ένα βήµα διακοπής, όπου ορίζεται η εκτέλεση του υποπρογράµµατος για κάποιες µικρές τιµές των παραµέτρων του, και ένα αναδροµικό βήµα, κατά το οποίο η εκτέλεση του υποπρογράµµατος ορίζεται ως συνδυασµός κλήσεων του υποπρογράµµατος σε άλλες µικρότερες τιµές των παραµέτρων. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι 2

Παράδειγµα αναδροµικής διαδικασίας int factorial ( int n ) { if n == 0 return 1; else return n factorial(n-1); 6 } 2 Εκτέλεση factorial(3) return 3 1 Εκτέλεση factorial(2) return 2 factorial(2); Εκτέλεση factorial(0) return 1 1 Εκτέλεση factorial(1) return 1 factorial(0); factorial(1); ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι 3

Υλοποίηση αναδροµής Σε κάθε κλήση οποιασδήποτε συνάρτησης ένα σύνολο από λέξεις (stack frame) φυλάσσεται σε µια στοίβα, από όπου µπορεί να ανασυρθεί. Όταν µια συνάρτηση διακόψει την εκτέλεσή της µε την κλήση µιας άλλης συνάρτησης οι παράµετροι της συνάρτησης, η διεύθυνση επιστροφής και οι τοπικές µεταβλητές της καλούσας συνάρτησης φυλάσσονται µέσα στη στοίβα του προγράµµατος. Έτσι όταν η κληθείσα συνάρτηση τερµατίσει το περιβάλλον την καλούσας συνάρτησης ανασύρεται από τη στοίβα για να συνεχιστεί κανονικά η εκτέλεσή της. Αφού κάθε κλήση µιας διαδικασίας εκτελείται στο δικό της περιβάλλον, είναι επιτρεπτή και η κλήση συναρτήσεων από τον εαυτό τους (αναδροµή). ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι 4

Υλοποίηση αναδροµής int f(int x, int y) { int a; if ( term_cond ) return...; a =...; return g(a); } int g(int z) { int p,q; p =...; q =...; return f(p,q); } ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι 5

Αφαίρεση της αναδροµής Ηχρήση της αναδροµής επιτρέπει την επίλυση πολύπλοκων προβληµάτων µε άµεσο και σαφή τρόπο. Συχνά όµως υστερεί από άποψη αποδοτικότητας. Η αφαίρεση της αναδροµής από µια συνάρτηση, δηλαδή, η µετατροπή της σε επαναληπτική συνάρτηση χωρίς αναδροµή, είναι δυνατή (κάτω από κάποιες συνθήκες). Συχνά προϋποθέτει τη χρήση κάποιων βοηθητικών δοµών (π.χ. στοίβα ή ουρά). ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι 6

Αναδροµή σε δένδρα Να γράψετε αναδροµική διαδικασία η οποία να τυπώνει τα στοιχεία ενός Α σε αύξουσα σειρά. Προφανώς ο αλγόριθµος έχει ως εξής: Αν το δένδρο δεν είναι κενό, τύπωσε 1. αναδροµικά τα στοιχεία του αριστερού υποδένδρου, 2. το στοιχείο της ρίζας και 3. αναδροµικά, τα στοιχεία του δεξιού υποδένδρου. Χρησιµοποιούµε τη δοµή typedef struct NODE{ int val; struct NODE *left; struct NODE *right; } node; και υποθέτουµε πως ένα δένδρο είναι υλοποιηµένο ως δείκτης στη ρίζα, δηλαδή, έχει τύπο *node. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι 7

Ηδιαδικασία Increasing(Node *q){ if (q!= null) Increasing(q -> left); print q -> val; Increasing(q -> right); } p 6 p 1 3 8 p 2 p 3 1 7 p p 4 3 9 ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι 8

Ορθότητα Η ορθότητα της διαδικασίας αποδεικνύεται µε επαγωγή. Έστω Π(n) η πρόταση: Η διαδικασία Increasing(p), όπου p δείκτης σε δένδρο µε n κόµβους, τυπώνει τα στοιχεία του δένδρου σε αύξουσα σειρά. Βασική Περίπτωση: Για n = 0, p = NULL, και η διαδικασία τερµατίζει. Υπόθεση της Επαγωγής: Ας υποθέσουµε ότι η πρόταση είναι ορθή για κάθε n<k. Βήµα της επαγωγής: Για n = k > 0 η διαδικασία εκτελεί Increasing(p->left); print p->val; Increasing(p->right) Προφανώς τα δένδρα που δείχνονται από τους δείκτες p->left και p->right έχουν λιγότερους από k κόµβους. Εποµένως, από την υπόθεση της επαγωγής, οι Increasing(p->left) και Increasing(p->right) θα τυπώσουν τα στοιχεία τους σε αύξουσα σειρά. Αφού επίσης, ισχύει ότι στοιχεία του δένδρου στοιχεία του δένδρου p->left < p->val < p->right το ζητούµενο έπεται. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι 9

Inc(p) Παράδειγµατης εκτέλεσης Inc(NULL); Inc (p 3 ); print 1; Inc(p 1 ); Inc(NULL); print 3; Inc(NULL); print 6; Inc (p 4 ); Inc(NULL); Inc(p 2 ); print 7; Inc(NULL); print 8; Inc(NULL); Inc(p 5 ); print 9; Inc(NULL); Output 1 3 6 7 8 9 ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι 10

Αφαίρεση της αναδροµής Να γράψετε µη-αναδροµική διαδικασία η οποία να τυπώνει τα στοιχεία ενός Α σε αύξουσα σειρά. Για να το πετύχετε µπορείτε να χρησιµοποιήσετε στοίβες. Η βασική ιδέα είναι η εξής: Εφόσον το δένδρο δεν είναι κενό προχωρούµε προς τα αριστερά φυλάγοντας τους κόµβους από τους οποίους περνούµε σε µία στοίβα. Όταν δεν µπορούµε να προχωρήσουµε άλλο ανασύρουµε τον κόµβο κορυφής της στοίβας, τυπώνουµε το στοιχείο του, και επαναλαµβάνουµε την ίδια διαδικασία στο δεξιό του παιδί. Yποθέτουµε την ύπαρξη υλοποίησης στοίβας και συγκεκριµένα των πράξεων, MakeEmpty, IsEmpty, Pop και Push. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι 11

Η µη-αναδροµική διαδικασία Increasing2(node *p){ stack S; MakeEmpty(S); while (p!= NULL OR!IsEmpty(S)) } if (p!= NULL) Push(p,S); p = p ->left; else p = Pop(S); print p->val; p = p->right; ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι 12