Γιάννης Σταματίου Αναδρομή και αναδρομικές σχέσεις Webcast 4
Ακολουθίες Κοιτάξτε τις ακολουθίες που εμφανίζονται στην αριστερή στήλη του πίνακα: a0 = 0, a1 = 1, a2 = 2, a3= 3, …, (φυσικοί αριθμοί) a0 = 1, a1 = 2, a2 = 4, a3 = 8, …, (δυνάμεις του 2) a0 = 1, a1 = 3, a2 = 5, a3= 7, …, (περιττοί φυσικοί αριθμοί) a0 = 0, a1 = 1, a2 = 1, a3= 2, a4= 3, a5= 5, …, (ακολουθία Fibonacci)
Ακολουθίες Κοιτάξτε τις ακολουθίες που εμφανίζονται στην αριστερή στήλη του πίνακα: a0 = 0, a1 = 1, a2 = 2, a3= 3, …, (φυσικοί αριθμοί) a0 = 1, a1 = 2, a2 = 4, a3 = 8, …, (δυνάμεις του 2) a0 = 1, a1 = 3, a2 = 5, a3= 7, …, (περιττοί φυσικοί αριθμοί) a0 = 0, a1 = 1, a2 = 1, a3= 2, a4= 3, a5= 5, …, (ακολουθία Fibonacci) Κοιτάξτε και τη δεξιά στήλη τώρα! Δίνεται ο «νιοστός» όρος της ακολουθίας ως συνάρτηση προηγούμενων όρων μέχρι που φτάνουμε σε δοσμένες τιμές
Ακολουθίες Κοιτάξτε τις ακολουθίες που εμφανίζονται στην αριστερή στήλη του πίνακα: a0 = 0, a1 = 1, a2 = 2, a3= 3, …, (φυσικοί αριθμοί) a0 = 0, an = an- 1 + 1 για n 1 a0 = 1, a1 = 2, a2 = 4, a3 = 8, …, (δυνάμεις του 2) a0 = 1, a1 = 3, a2 = 5, a3= 7, …, (περιττοί φυσικοί αριθμοί) a0 = 0, a1 = 1, a2 = 1, a3= 2, a4= 3, a5= 5, …, (ακολουθία Fibonacci) Κοιτάξτε και τη δεξιά στήλη τώρα! Δίνεται ο «νιοστός» όρος της ακολουθίας ως συνάρτηση προηγούμενων όρων μέχρι που φτάνουμε σε δοσμένες τιμές
Ακολουθίες Κοιτάξτε τις ακολουθίες που εμφανίζονται στην αριστερή στήλη του πίνακα: a0 = 0, a1 = 1, a2 = 2, a3= 3, …, (φυσικοί αριθμοί) a0 = 0, an = an- 1 + 1 για n 1 a0 = 1, a1 = 2, a2 = 4, a3 = 8, …, (δυνάμεις του 2) a0 = 1, an = 2an- 1 για n 1 a0 = 1, a1 = 3, a2 = 5, a3= 7, …, (περιττοί φυσικοί αριθμοί) a0 = 0, a1 = 1, a2 = 1, a3= 2, a4= 3, a5= 5, …, (ακολουθία Fibonacci) Κοιτάξτε και τη δεξιά στήλη τώρα! Δίνεται ο «νιοστός» όρος της ακολουθίας ως συνάρτηση προηγούμενων όρων μέχρι που φτάνουμε σε δοσμένες τιμές
Ακολουθίες Κοιτάξτε τις ακολουθίες που εμφανίζονται στην αριστερή στήλη του πίνακα: a0 = 0, a1 = 1, a2 = 2, a3= 3, …, (φυσικοί αριθμοί) a0 = 0, an = an- 1 + 1 για n 1 a0 = 1, a1 = 2, a2 = 4, a3 = 8, …, (δυνάμεις του 2) a0 = 1, an = 2an- 1 για n 1 a0 = 1, a1 = 3, a2 = 5, a3= 7, …, (περιττοί φυσικοί αριθμοί) a0 = 1, an = an- 1 + 2 για n 1 a0 = 0, a1 = 1, a2 = 1, a3= 2, a4= 3, a5= 5, …, (ακολουθία Fibonacci) Κοιτάξτε και τη δεξιά στήλη τώρα! Δίνεται ο «νιοστός» όρος της ακολουθίας ως συνάρτηση προηγούμενων όρων μέχρι που φτάνουμε σε δοσμένες τιμές
Ακολουθίες Κοιτάξτε τις ακολουθίες που εμφανίζονται στην αριστερή στήλη του πίνακα: a0 = 0, a1 = 1, a2 = 2, a3= 3, …, (φυσικοί αριθμοί) a0 = 0, an = an- 1 + 1 για n 1 a0 = 1, a1 = 2, a2 = 4, a3 = 8, …, (δυνάμεις του 2) a0 = 1, an = 2an- 1 για n 1 a0 = 1, a1 = 3, a2 = 5, a3= 7, …, (περιττοί φυσικοί αριθμοί) a0 = 1, an = an- 1 + 2 για n 1 a0 = 0, a1 = 1, a2 = 1, a3= 2, a4= 3, a5= 5, …, (ακολουθία Fibonacci) a0 = 0, a1=1, an = an- 1 + an- 2 για n 2 Κοιτάξτε και τη δεξιά στήλη τώρα! Δίνεται ο «νιοστός» όρος της ακολουθίας ως συνάρτηση προηγούμενων όρων μέχρι που φτάνουμε σε δοσμένες τιμές
Δυαδικά δέντρα Ένα δυαδικό δέντρο είτε είναι άδειο είτε αποτελείται από ένα διακεκριμένο κόμβο (ρίζα)
Δυαδικά δέντρα Ένα δυαδικό δέντρο είτε είναι άδειο είτε αποτελείται από ένα διακεκριμένο κόμβο (ρίζα) ενωμένο με δύο μικρότερα δέντρα (αριστερό
Δυαδικά δέντρα Ένα δυαδικό δέντρο είτε είναι άδειο είτε αποτελείται από ένα διακεκριμένο κόμβο (ρίζα) ενωμένο με δύο μικρότερα δέντρα (αριστερό και δεξί υποδέντρο)
Δυαδικά δέντρα Ένα δυαδικό δέντρο είτε είναι άδειο είτε αποτελείται από ένα διακεκριμένο κόμβο (ρίζα) ενωμένο με δύο μικρότερα δέντρα (αριστερό και δεξί υποδέντρο) Ορίζεται ένα δέντρο ως συνάρτηση μικρότερων δέντρων μέχρι που φτάνουμε στο κενό δέντρο
Παιχνίδια – ο πύργος του Ανόι from to spare
Παιχνίδια – ο πύργος του Ανόι from to spare procedure moveDisks(n, from, to, spare) if n = 1 then // βασική περίπτωση write(“Move disk from”, from, “to”, to) else moveDisks(n - 1, from, spare, to) write(“Move disk from”, from, “to”, to) moveDisks(n - 1, spare, to, from) end
Παιχνίδια – ο πύργος του Ανόι from to spare procedure moveDisks(n, from, to, spare) if n = 1 then // βασική περίπτωση write(“Move disk from”, from, “to”, to) else moveDisks(n - 1, from, spare, to) write(“Move disk from”, from, “to”, to) moveDisks(n - 1, spare, to, from) end H λύση συντίθεται από δύο υπολύσεις σε μικρότερα προβλήματα (με n – 1 δίσκους)!
Αλγόριθμοι – δυαδική αναζήτηση Εύρεση στοιχείου σε ήδη ταξινομημένη λίστα στοιχείων function binSearch(s, i, j, key) if i > j then // βασική περίπτωση return 0 k ceil((i+j)/2) if key = s[k] then // το στοιχείο βρέθηκε return k if key < s[k] then // αριστερή υπολίστα j k – 1 else // δεξιά υπολίστα i k + 1 return binSearch(s, i, j, key) end
Τέχνη - Escher
Αναδρομικοί ορισμοί Ο ορισμός ενός αντικειμένου (ακολουθίας, συνδυαστικής δομής, παιχνιδιού, λύσης σε υπολογιστικό πρόβλημα, έργου τέχνης κλπ.) καλείται αναδρομικός εάν
Αναδρομικοί ορισμοί Ο ορισμός ενός αντικειμένου (ακολουθίας, συνδυαστικής δομής, παιχνιδιού, λύσης σε υπολογιστικό πρόβλημα, έργου τέχνης κλπ.) καλείται αναδρομικός εάν Το αντικείμενο ορίζεται ως συνάρτηση ενός ή περισσοτέρων «μικρότερων» αντικειμένων του ίδιου τύπου, και
Αναδρομικοί ορισμοί Ο ορισμός ενός αντικειμένου (ακολουθίας, συνδυαστικής δομής, παιχνιδιού, λύσης σε υπολογιστικό πρόβλημα, έργου τέχνης κλπ.) καλείται αναδρομικός εάν Το αντικείμενο ορίζεται ως συνάρτηση ενός ή περισσοτέρων «μικρότερων» αντικειμένων του ίδιου τύπου, και Υπάρχει ένα «ελάχιστο» αντικείμενο που ορίζεται απ’ ευθείας χωρίς αναφορά σε μικρότερα αντικείμενα του ίδιου τύπου
Ποια η χρησιμότητα της αναδρομής; Ο πιο φυσικός ορισμός για μια μεγάλη κατηγορία αντικειμένων που παρουσιάζουν «αυτο-ομοιότητα» (π.χ. δυαδικά δέντρα) Οδηγεί σε κομψή (αν και όχι πάντοτε αποδοτική) περιγραφή λύσεων σε υπολογιστικά προβλήματα Συνάγεται απ’ ευθείας από τη δομή του προβλήματος χωρίς να απαιτείται γνώση της δομής της λύσης
Αναδρομή και επανάληψη
Αναδρομή και επανάληψη an a0
Αναδρομή και επανάληψη an a0 a0 an
Αναδρομή και επανάληψη procedure moveDisks(n) for moveno = 1 to Power(2, n) - 1 do begin discno = LS1(moveno) if odd(discno) then MoveDisc(discno, (moveno - 1) mod 3, (moveno + 1) mod 3) else MoveDisc(discno, (moveno + 1) mod 3, (moveno - 1) mod 3) end
Αναδρομή και επανάληψη procedure moveDisks(n) for moveno = 1 to Power(2, n) - 1 do begin discno = LS1(moveno) if odd(discno) then MoveDisc(discno, (moveno - 1) mod 3, (moveno + 1) mod 3) else MoveDisc(discno, (moveno + 1) mod 3, (moveno - 1) mod 3) end procedure moveDisks(n, from, to, spare) if n = 1 then // βασική περίπτωση write(“Move disk from”, from, “to”, to) else moveDisks(n - 1, from, spare, to) write(“Move disk from”, from, “to”, to) moveDisks(n - 1, spare, to, from) end
Αναδρομικές σχέσεις a0 = 0, an = an- 1 + 1 για n 1 a0 = 0, a1=1, an = an- 1 + an- 2 για n 2
Αναδρομικές σχέσεις καί λύσεις a0 = 0, an = an- 1 + 1 για n 1 a0 = 1, an = 2an- 1 για n 1 a0 = 1, an = an- 1 + 2 για n 1 a0 = 0, a1=1, an = an- 1 + an- 2 για n 2 an = n, n 0 an = 2n, n 0 an = 2n + 1, n 0