Διακριτά Μαθηματικά ΙI Αναδρομή Κώστας Στεργίου Λέκτορας Τμήμα Μηχανικών Πληροφοριακών & Επικοινωνιακών Συστημάτων Πανεπιστήμιο Αιγαίου e-mail: konsterg@aegean.gr ΤΜΗΜΑ ΜΠΕΣ
Αναδρομή Αναδρομή είναι ο γενικός όρος για τον ορισμό ενός αντικειμένου σε σχέση με τον εαυτό του ή με μέρος του εαυτού του αυτό μπορεί να ακούγεται κυκλικό (ατέρμονος βρόγχος), αλλά δεν είναι απαραίτητα. Μια επαγωγική απόδειξη δείχνει την αλήθεια του P(n+1) αναδρομικά σε σχέση με το P(n). Υπάρχουν επίσης αναδρομικοί αλγόριθμοι, ορισμοί, συναρτήσεις, ακολουθίες, σύνολα, και άλλες δομές ΤΜΗΜΑ ΜΠΕΣ
Αναδρομικά Ορισμένες Συναρτήσεις Για μια αριθμητική συνάρτηση (α0,α1,...,αr,...), μια εξίσωση που συσχετίζει το αr για οποιοδήποτε r, με ένα ή περισσότερα από τα αi, i<r, ονομάζεται αναδρομική σχέση συχνά είναι πιο εύκολο να βρούμε έναν ορισμό μιας συνάρτησης σε μορφή αναδρομικής σχέσης από το να βρούμε μια γενική έκφραση για την τιμή της συνάρτησης στο r έχοντας την αναδρομική σχέση μπορούμε να προσδιορίσουμε το αr από τα αr-1, αr-2..., να προσδιορίσουμε το αr+1 από τα αr, αr-1..., κ.ο.κ. με την προϋπόθεση ότι δίνεται η τιμή της συνάρτησης σε ένα ή περισσότερα σημεία για να ξεκινήσει ο υπολογισμός. Αυτές οι δεδομένες τιμές της συνάρτησης ονομάζονται συνοριακές συνθήκες ή βασικές περιπτώσεις ΤΜΗΜΑ ΜΠΕΣ
Αναδρομικά Ορισμένες Συναρτήσεις Μια αριθμητική συνάρτηση μπορεί να περιγραφεί από μια αναδρομική σχέση μαζί με ένα κατάλληλο σύνολο βασικών περιπτώσεων η συνάρτηση που ορίζεται με αυτόν τον τρόπο ονομάζεται και λύση της αναδρομικής σχέσης εκτός από τις τιμές της συνάρτησης συχνά θέλουμε να προσδιορίσουμε και μια γενική (μη αναδρομική) έκφραση της λύσης γενικά δεν υπάρχει μέθοδος που να μπορεί να το κάνει αυτό για όλες τις αναδρομικές σχέσεις ΤΜΗΜΑ ΜΠΕΣ
Αναδρομικά Ορισμένες Συναρτήσεις Απλή περίπτωση: Ένας τρόπος για να οριστεί η συνάρτηση f:ℕS (για κάθε σύνολο S) ή η σειρά an=f(n) είναι να: Ορίσουμε το f(0). Για n>0, να ορίσουμε την f(n) σε σχέση με f(0),…,f(n−1). Παράδειγμα: Ορίστε τη σειρά an :≡ 2n αναδρομικά: Ορίζουμε a0 :≡ 1. Για n>0, ορίζουμε an :≡ 2an-1. ΤΜΗΜΑ ΜΠΕΣ
Αναδρομικά Ορισμένες Συναρτήσεις Ας υποθέσουμε ότι ορίζουμε την f(n) για όλα τα nℕ αναδρομικά ως: Ορίζουμε f(0)=3 Για κάθε nℕ, ορίζουμε f(n+1)=2f(n)+3 Ποιες είναι οι τιμές των παρακάτω? f(1)= f(2)= f(3)= f(4)= 9 21 45 93 ΤΜΗΜΑ ΜΠΕΣ
Αναδρομικός Ορισμός Παραγοντικού Δώστε έναν αναδρομικό ορισμό της συνάρτησης παραγοντικού, F(n) :≡ n! :≡ ∏1≤i≤n i = 12…n. Βασική περίπτωση: F(0) :≡ 1 Αναδρομικό μέρος: F(n) :≡ n F(n−1). F(1)=1 F(2)=2 F(3)=6 ΤΜΗΜΑ ΜΠΕΣ
Παραδείγματα Γράψτε αναδρομικούς ορισμούς για τα παρακάτω: i+n (i ακέραιος, n φυσικός) a·n (a πραγματικός, n φυσικός) χρησιμοποιώντας μόνο πρόσθεση an (a πραγματικός, n φυσικός) χρησιμοποιώντας μόνο πολλαπλασιασμό ∑0≤i≤n ai (για μια οποιαδήποτε σειρά αριθμών {ai}) ∏0≤i≤n ai (για μια οποιαδήποτε σειρά αριθμών{ai}) ∩0≤i≤n Si (για μια οποιαδήποτε σειρά συνόλων {Si}) ΤΜΗΜΑ ΜΠΕΣ
Η σειρά Fibonacci Η σειρά Fibonacci f(n)≥0 είναι μια διάσημη σειρά που ορίζεται ως εξής: f0 :≡ 0, f1 :≡ 1, f(n)≥2 :≡ f(n−1) + f(n−2) 1 1 2 3 5 8 13 Leonardo Fibonacci 1170-1250 ΤΜΗΜΑ ΜΠΕΣ
Επαγωγική Απόδειξη σχετικά με τη σειρά Fibonacci Θεώρημα fn < 2n. Απόδειξη με επαγωγή. Βασικές περιπτώσεις: f0 = 0 < 20 = 1 f1 = 1 < 21 = 2 Επαγωγικό βήμα: Υποθέτουμε ότι k<n, fk < 2k. Τότε fn = fn−1 + fn−2 είναι < 2n−1 + 2n−2 < 2n−1 + 2n−1 = 2n. ΤΜΗΜΑ ΜΠΕΣ
Αναδρομικά Ορισμένα Σύνολα Ένα άπειρο σύνολο S μπορεί να οριστεί αναδρομικά, δίνοντας: Ένα μικρό πεπερασμένο σύνολο βασικών στοιχείων του S. Έναν κανόνα για την κατασκευή νέων στοιχείων του S από προϋπάρχοντα στοιχεία. Έμμεσα, θεωρούμε ότι το S δεν έχει άλλα στοιχεία εκτός από αυτά. Παραδείγματα Έστω 3S, και x+yS αν x,yS. Ποιο είναι το σύνολο S? Έστω 1S, και x+1S αν xS. ΤΜΗΜΑ ΜΠΕΣ
Το Σύνολο όλων των Συμβολοσειρών Ορισμός Δοθέντος ενός αλφάβητου Σ, το σύνολο Σ* όλων των συμβολοσειρών πάνω στο Σ μπορεί να οριστεί αναδρομικά ως: λ Σ* (λ :≡ “ ”, η κενή συμβολοσειρά) w Σ* x Σ → wx Σ* Άσκηση: Αποδείξτε ότι αυτός ο ορισμός είναι ισοδύναμος με τον γνωστό: ΤΜΗΜΑ ΜΠΕΣ
Παραδείγματα Συμβολοσειρών Δώστε αναδρομικούς ορισμούς για: Τη συνένωση συμβολοσειρών w1·w2. Το μήκος (w) μιας συμβολοσειράς w. Καλά σχηματισμένες προτάσεις προτασιακής λογικής που περιέχουν T, F, προτασιακές μεταβλητές, και τους τελεστές {¬, , , →, ↔}. Καλά σχηματισμένες αριθμητικές προτάσεις που μεταβλητές, σταθερές, και τελεστές {+, −, *}. ΤΜΗΜΑ ΜΠΕΣ
Δέντρα με Ρίζα Ορισμός συνόλου δέντρων με ρίζα: Κάθε μοναδική κορυφή r είναι ένα δέντρο με ρίζα. Αν T1, …, Tn είναι ασύνδετα δέντρα με ρίζα με αντίστοιχες ρίζες r1, …, rn, και r είναι ένας κόμβος σε κανένα από τα Ti, τότε ένα δέντρο με ρίζα είναι το {{r,r1},…,{r,rn}}T1…Tn. Αυτά είναι όλα τα δέντρα με ρίζα. ΤΜΗΜΑ ΜΠΕΣ
Δέντρα με Ρίζα Ο τρόπος συνδυασμού δέντρων με ρίζα για τον σχηματισμό νέων δέντρων με ρίζα… r … T1 r1 T2 r2 Tn rn ΤΜΗΜΑ ΜΠΕΣ
Δυαδικά Δέντρα Ειδική περίπτωση δέντρων με ρίζα. Ορισμός Δυαδικών Δέντρων (BT): Το κενό σύνολο είναι ένα BT. Αν T1,T2 είναι ασύνδετα BTs, τότε e1e2 T1T2 είναι ένα BT, όπου e1 = αν T1 = , και e1 = {(r,r1)} αν T1≠ και έχει ρίζα r1, και παρόμοια για το e2. Αυτά είναι τα μόνα ΒΤ. Παραδείγματα… ΤΜΗΜΑ ΜΠΕΣ
Πλήρη Δυαδικά Δέντρα Ειδική περίπτωση δυαδικών δέντρων όπου κάθε κορυφή έχει 0 ή 2 παιδιά. Αναδρομικός ορισμός Πλήρων Δυαδικών Δέντρων (FBT): i) Μια μοναδική κορυφή r είναι ένα FBT. Προσέξτε τη διαφορά από τη βασική περίπτωση των ΒΤ. ii) Αν T1,T2 είναι ασύνδετα FBTs, τότε e1e2T1T2 είναι ένα FBT, όπου e1 = αν T1 = , και e1 = {(r,r1)} αν T1≠ και έχει ρίζα r1, και ομοίως για το e2. Ίδια με την αναδρομική περίπτωση των ΒΤ! Απλοποιείται ως “Αν T1,T2 είναι ασύνδετα FBTs με ρίζες r1 και r2, τότε {(r, r1),(r,r2)} T1T2 είναι ένα FBT.” i) Αυτά είναι όλα τα FBT. Παραδείγματα… ΤΜΗΜΑ ΜΠΕΣ
Δομική Επαγωγή Η απόδειξη μιας ιδιότητας ενός αναδρομικά ορισμένου αντικειμένου χρησιμοποιώντας μια επαγωγική απόδειξη της οποίας η δομή αντικατοπτρίζει τον ορισμό του αντικειμένου. ΤΜΗΜΑ ΜΠΕΣ
Δομική Επαγωγή Θεώρημα Έστω 3S, και x+yS αν x,yS. Έστω A = {nℤ+| (3|n)}. Τότε A=S. Απόδειξη. Θα δείξουμε ότι AS και SA. Για να δείξουμε AS, δείξτε [nℤ+ (3|n)]→ nS. Επαγωγική απόδειξη. Έστω P(n) :≡ nS. Επαγωγή πάνω στα θετικά πολλαπλάσια του 3. Βάση. n=3, οπότε 3S από τον ορισμό του S. Βήμα. Δοθέντος P(n), αποδείξτε P(n+3). Από την υπόθεση, nS, και 3S, άρα από τον ορισμό του S, n+3S. Για να δείξουμε SA: έστω nS, δείξτε nA. Δομική επαγωγική απόδειξη. Έστω P(n):≡nA. Βάση. 3S . Μια και 3|3, 3A. Αναδρομικό βήμα. x,y S, n=x+y S και x,y A . Μια και 3|x και 3|y, έχουμε 3|(x+y), οπότε x+y = n A. ΤΜΗΜΑ ΜΠΕΣ
Αναδρομικοί Αλγόριθμοι Εκτός από την περιγραφή συναρτήσεων και συνόλων, αναδρομικοί ορισμοί μπορούν να χρησιμοποιηθούν και για την περιγραφή αλγορίθμων. Παράδειγμα Μια διαδικασία για τον υπολογισμό του an. procedure power(a≠0: real, nℕ) if n = 0 then return 1 else return a · power(a, n−1) ΤΜΗΜΑ ΜΠΕΣ
Απόδοση Αναδρομικών Αλγόριθμων Η χρονική πολυπλοκότητα ενός αναδρομικού αλγόριθμου εξαρτάται από το πλήθος των αναδρομικών κλήσεων που κάνει. Παράδειγμα Ο υπολογισμός του Modular exponentiation σε μια δύναμη n μπορεί να γίνει με log(n) χρόνο αν γίνει σωστά, αλλά με γραμμικό χρόνο αν γίνει λίγο διαφορετικά. Υπολογίστε το bn mod m, όπου m≥2, n≥0, and 1≤b<m. ΤΜΗΜΑ ΜΠΕΣ
Modular Exponentiation Alg. #1 Χρησιμοποιεί το γεγονός ότι bn = b·bn−1 και ότι x·y mod m = x·(y mod m) mod m. procedure mpower(b≥1,n≥0,m>b ℕ) {Returns bn mod m.} if n=0 then return 1 else return (b·mpower(b,n−1,m)) mod m Αυτός ο αλγόριθμος εκτελεί Θ(n) βήματα! ΤΜΗΜΑ ΜΠΕΣ
Modular Exponentiation Alg. #2 Χρησιμοποιεί το γεγονός ότι b2k = bk·2 = (bk)2. procedure mpower(b,n,m) if n=0 then return 1 else if 2|n then return mpower(b,n/2,m)2 mod m else return (mpower(b,n−1,m)·b) mod m Ποια είναι η χρονική πολυπλοκότητα? Θ(log n) ΤΜΗΜΑ ΜΠΕΣ
Μια μικρή παραλλαγή Σχεδόν όμοιος αλλά απαιτεί Θ(n) χρόνο! procedure mpower(b,n,m) if n=0 then return 1 else if 2|n then return (mpower(b,n/2,m)· mpower(b,n/2,m)) mod m else return (mpower(b,n−1,m)·b) mod m Το πλήθος των αναδρομικών κλήσεων είναι κρίσιμο! ΤΜΗΜΑ ΜΠΕΣ
Αναδρομικοί Αλγόριθμοι Οι αναδρομικοί αλγόριθμοι είναι συχνά πιο εύκολοι στην υλοποίηση από ότι οι επαναληπτικοί… Όμως (όπως θα δείτε στο Β’ έτος) μπορούν να έχουν προβλήματα υπερβολικής κατανάλωσης μνήμης ΤΜΗΜΑ ΜΠΕΣ
Αναδρομική Γραμμική Αναζήτηση Εδώ δεν υπάρχει κανένα πραγματικό πλεονέκτημα από τη χρήση αναδρομής, μπορεί απλά να υλοποιηθεί με έναν βρόγχο for loc := i to j… procedure search(a: ακολουθία; i, j: ακέραιοι; x: στοιχείο προς εύρεση) if ai = x then return i {Το βρήκαμε? Επέστρεψε το!} if i = j then return 0 {Δεν υπάρχει? Αποτυχία!} return search(i+1, j, x) {Δοκίμασε το υπόλοιπο διάστημα} ΤΜΗΜΑ ΜΠΕΣ
Αναδρομική Δυαδική Αναζήτηση procedure binarySearch(a, x, i, j) {Βρες το x στην ακολουθία a, ≥i και <j} m := (i + j)/2 {Πήγαινε στο μεσαίο σημείο} if x = am then return m {Βρέθηκε?} if x<am i<m {Αν είναι προς τα αριστερά} then return binarySearch(a,x,i,m−1) else if am<x m<j {Αν είναι προς τα δεξιά} then return binarySearch(a,x,m+1,j) else return 0 {Δεν υπάρχουν άλλα στοιχεία, αποτυχία} ΤΜΗΜΑ ΜΠΕΣ
Αναδρομικός Αλγόριθμος Fibonacci procedure fibonacci(n N) if n=0 then return 0 if n=1 then return 1 return fibonacci(n−1)+fibonacci(n−2) Είναι ο αλγόριθμος αποδοτικός? Έχει πολυωνυμική πολυπλοκότητα στο n? Πόσες προσθέσεις εκτελούνται? ΤΜΗΜΑ ΜΠΕΣ
Ανάλυση του Αλγόριθμου Θεώρημα Ο προηγούμενος αλγόριθμος για το fibonacci(n) εκτελεί fn+1−1 προσθέσεις. Απόδειξη Με δομική επαγωγή στο n, βασισμένη στην αναδρομική περιγραφή του αλγόριθμου. Βάση: fibonacci(0) εκτελεί 0 προσθέσεις, και f0+1−1 = f1 − 1 = 1 − 1 = 0. Παρόμοια, fibonacci(1) εκτελεί 0 προσθέσεις, και f1+1−1 = f2−1 = 1−1 = 0. Βήμα: For n>1, από την υπόθεση, fibonacci(n−1) και fibonacci(n−2) εκτελούν fn−1 και fn−1−1 προσθέσεις, και fibonacci(n) προσθέτει άλλη μια, με σύνολο fn−1+ fn−1−1+1 = fn+fn−1−1 = fn+1−1. ■ ΤΜΗΜΑ ΜΠΕΣ
Ένας καλύτερος Αλγόριθμος procedure findFib(a,b,m,n) {Δοθέντων a=fm−1, b=fm,και m≤n, επέστρεψε το fn} if m=n then return b return findFib(b, a+b, m+1, n) procedure fastFib(n) {Βρες το fn σε Θ(n) βήματα} if n=0 then return 0 return findFib(0,1,1,n) ΤΜΗΜΑ ΜΠΕΣ