1 / 62

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

Αναδρομικοί Αλγόριθμοι. Αναδρομικός αλγόριθμος ( recursive algorithm). Επιλύει ένα πρόβλημα λύνοντας ένα ή περισσότερα στιγμιότυπα του ίδιου προβλήματος. TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: A A A A A A A. Αναδρομικοί Αλγόριθμοι.

leila-quinn
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Αναδρομικοί Αλγόριθμοι Αναδρομικός αλγόριθμος (recursive algorithm) Επιλύει ένα πρόβλημα λύνοντας ένα ή περισσότερα στιγμιότυπα του ίδιου προβλήματος. TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAAAAAA

  2. Αναδρομικοί Αλγόριθμοι Αναδρομικός αλγόριθμος (recursive algorithm) Επιλύει ένα πρόβλημα λύνοντας ένα ή περισσότερα στιγμιότυπα του ίδιου προβλήματος. Παράδειγμα: Υπολογισμός παραγοντικού int factorial (int N) { if (N==0) return 1; return N*factorial(N-1); } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAAAAAA

  3. Αναδρομικοί Αλγόριθμοι Παράδειγμα: Υπολογισμός παραγοντικού αναδρομικό πρόγραμμα μη αναδρομικό πρόγραμμα int factorial (int N) { if (N==0) return 1; return N*factorial(N-1); } for (t=1, i=1; i<=N; i++){ t *= i; } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAAAAAA

  4. Αναδρομικοί Αλγόριθμοι Παράδειγμα: Υπολογισμός παραγοντικού αναδρομικό πρόγραμμα μη αναδρομικό πρόγραμμα int factorial (int N) { if (N==0) return 1; return N*factorial(N-1); } for (t=1, i=1; i<=N; i++){ t *= i; } • Κάθε αναδρομικό πρόγραμμα μπορεί να μετατραπεί σε ισοδύναμο • μη αναδρομικό πρόγραμμα. • Πολλές φορές όμως η χρήση αναδρομής δίνει πιο σύντομα ή/και πιο • αποδοτικά προγράμματα.

  5. Αναδρομικοί Αλγόριθμοι Παράδειγμα: Υπολογισμός μέγιστου κοινού διαιρέτη ακέραιοι όπου : ο μεγαλύτερος ακέραιος που τους διαιρεί ακριβώς

  6. Αναδρομικοί Αλγόριθμοι Παράδειγμα: Υπολογισμός μέγιστου κοινού διαιρέτη ακέραιοι όπου : ο μεγαλύτερος ακέραιος που τους διαιρεί ακριβώς Αλγόριθμος του Ευκλείδη Βασίζεται στον κανόνα όπουείναι θετικοί ακέραιοι

  7. Αναδρομικοί Αλγόριθμοι Παράδειγμα: Υπολογισμός μέγιστου κοινού διαιρέτη ακέραιοι όπου : ο μεγαλύτερος ακέραιος που τους διαιρεί ακριβώς Αλγόριθμος του Ευκλείδη Βασίζεται στον κανόνα όπουείναι θετικοί ακέραιοι Αν ο είναι κοινός διαιρέτης των τότε και , άρα

  8. Αναδρομικοί Αλγόριθμοι Παράδειγμα: Υπολογισμός μέγιστου κοινού διαιρέτη ακέραιοι όπου : ο μεγαλύτερος ακέραιος που τους διαιρεί ακριβώς Αλγόριθμος του Ευκλείδη Βασίζεται στον κανόνα όπουείναι θετικοί ακέραιοι Αν ο είναι κοινός διαιρέτης των τότε και , άρα Αν ο είναι κοινός διαιρέτης των τότε και , άρα

  9. Αναδρομικοί Αλγόριθμοι Παράδειγμα: Υπολογισμός μέγιστου κοινού διαιρέτη ακέραιοι όπου : ο μεγαλύτερος ακέραιος που τους διαιρεί ακριβώς Αλγόριθμος του Ευκλείδη Βασίζεται στον κανόνα όπουείναι θετικοί ακέραιοι Επομένως

  10. Αναδρομικοί Αλγόριθμοι Παράδειγμα: Υπολογισμός μέγιστου κοινού διαιρέτη ακέραιοι όπου : ο μεγαλύτερος ακέραιος που τους διαιρεί ακριβώς Αλγόριθμος του Ευκλείδη Βασίζεται στον κανόνα όπουείναι θετικοί ακέραιοι int gcd (int x, int y) { if (y==0) return x; return gcd(y, x%y); }

  11. Αναδρομικοί Αλγόριθμοι Παράδειγμα: Υπολογισμός μέγιστου κοινού διαιρέτη ακέραιοι όπου : ο μεγαλύτερος ακέραιος που τους διαιρεί ακριβώς Αλγόριθμος του Ευκλείδη Βασίζεται στον κανόνα όπουείναι θετικοί ακέραιοι int gcd (int x, int y) { if (y==0) return x; return gcd(y, x%y); } Παράδειγμα gcd(128,40)=

  12. Αναδρομικοί Αλγόριθμοι Παράδειγμα: Υπολογισμός μέγιστου κοινού διαιρέτη ακέραιοι όπου : ο μεγαλύτερος ακέραιος που τους διαιρεί ακριβώς Αλγόριθμος του Ευκλείδη Βασίζεται στον κανόνα όπουείναι θετικοί ακέραιοι int gcd (int x, int y) { if (y==0) return x; return gcd(y, x%y); } Παράδειγμα gcd(128,40)= gcd(40,8)=

  13. Αναδρομικοί Αλγόριθμοι Παράδειγμα: Υπολογισμός μέγιστου κοινού διαιρέτη ακέραιοι όπου : ο μεγαλύτερος ακέραιος που τους διαιρεί ακριβώς Αλγόριθμος του Ευκλείδη Βασίζεται στον κανόνα όπουείναι θετικοί ακέραιοι int gcd (int x, int y) { if (y==0) return x; return gcd(y, x%y); } Παράδειγμα gcd(128,40)= gcd(40,8)= gcd(8,0)= 8

  14. Αναδρομικοί Αλγόριθμοι Παράδειγμα: Υπολογισμός μέγιστου κοινού διαιρέτη ακέραιοι όπου : ο μεγαλύτερος ακέραιος που τους διαιρεί ακριβώς Αλγόριθμος του Ευκλείδη Βασίζεται στον κανόνα όπουείναι θετικοί ακέραιοι Ιδιότητα: Αν τότε

  15. Αναδρομικοί Αλγόριθμοι Παράδειγμα: Υπολογισμός μέγιστου κοινού διαιρέτη ακέραιοι όπου : ο μεγαλύτερος ακέραιος που τους διαιρεί ακριβώς Αλγόριθμος του Ευκλείδη Βασίζεται στον κανόνα όπουείναι θετικοί ακέραιοι Ιδιότητα: Αν τότε Απόδειξη:

  16. Αναδρομικοί Αλγόριθμοι Παράδειγμα: Υπολογισμός μέγιστου κοινού διαιρέτη ακέραιοι όπου : ο μεγαλύτερος ακέραιος που τους διαιρεί ακριβώς Αλγόριθμος του Ευκλείδη Βασίζεται στον κανόνα όπουείναι θετικοί ακέραιοι Ιδιότητα: Αν τότε ο αλγόριθμος του Ευκλείδη είναι αποδοτικός : απαιτεί επαναλήψεις

  17. Αναδρομικοί Αλγόριθμοι Αναδρομική συνάρτηση καταμέτρησης του πλήθους των κόμβων σε μία συνδεδεμένη λίστα next typedef struct node *link; struct node {Item item; link next;}; int count(link x) { if (x == NULL) return 0; return 1 + count(x->next); } node : item μηδενικός σύνδεσμος (NULL) head

  18. Αναδρομικοί Αλγόριθμοι: Διαίρει και βασίλευε πρόβλημα μεγέθους Ν διάσπαση πρόβλημα μεγέθους Ν-k πρόβλημα μεγέθους k

  19. Αναδρομικοί Αλγόριθμοι: Διαίρει και βασίλευε πρόβλημα μεγέθους Ν διάσπαση πρόβλημα μεγέθους Ν-k πρόβλημα μεγέθους k επιλύουμε αναδρομικά τα υποπροβλήματα

  20. Αναδρομικοί Αλγόριθμοι: Διαίρει και βασίλευε πρόβλημα μεγέθους Ν διάσπαση πρόβλημα μεγέθους Ν-k πρόβλημα μεγέθους k επιλύουμε αναδρομικά τα υποπροβλήματα

  21. Αναδρομικοί Αλγόριθμοι: Διαίρει και βασίλευε πρόβλημα μεγέθους Ν διάσπαση πρόβλημα μεγέθους Ν-k πρόβλημα μεγέθους k επιλύουμε αναδρομικά τα υποπροβλήματα

  22. Αναδρομικοί Αλγόριθμοι: Διαίρει και βασίλευε πρόβλημα μεγέθους Ν σύνθεση πρόβλημα μεγέθους Ν-k πρόβλημα μεγέθους k επιλύουμε αναδρομικά τα υποπροβλήματα

  23. Αναδρομικοί Αλγόριθμοι: Διαίρει και βασίλευε πρόβλημα μεγέθους Ν σύνθεση πρόβλημα μεγέθους Ν-k πρόβλημα μεγέθους k επιλύουμε αναδρομικά τα υποπροβλήματα

  24. Αναδρομικοί Αλγόριθμοι: Διαίρει και βασίλευε πρόβλημα μεγέθους Ν διάσπαση προβλήματος / σύνθεση λύσεων πρόβλημα μεγέθους Ν-k πρόβλημα μεγέθους k επιλύουμε αναδρομικά τα υποπροβλήματα Χρόνος εκτέλεσης : χρόνος διάσπασης χρόνος σύνθεσης

  25. Αναδρομικοί Αλγόριθμοι Απλό πρόβλημα : Εύρεση ελάχιστου στοιχείου ακολουθίας αναδρομικό πρόγραμμα «διαίρει και βασίλευε» μη αναδρομικό πρόγραμμα t = a[0]; for (i = 1; i < N; i++) if (a[i] < t) t = a[i]; int min(int a[], int l, int r) { int u, v, m = (l+r)/2; if (l == r) return a[l]; u = min(a, l, m); v = min(a, m+1, r); if (u<v) return u; else return v; }

  26. Αναδρομικοί Αλγόριθμοι Οι Πύργοι του Ανόι 1 3 πάσσαλοι και Ν δίσκοι Ν Θέλουμε να μετακινήσουμε τους δίσκους κατά ένα πάσσαλο δεξιά, υπακούοντας στους παρακάτω κανόνες 1) Μετακινούμε ένα δίσκο τη φορά 2) Ένας δίσκος δεν μπορεί να τοποθετηθεί πάνω από μικρότερο δίσκο

  27. Αναδρομικοί Αλγόριθμοι Οι Πύργοι του Ανόι 1 3 πάσσαλοι και Ν δίσκοι Ν Θέλουμε να μετακινήσουμε τους δίσκους κατά ένα πάσσαλο δεξιά, υπακούοντας στους παρακάτω κανόνες 1) Μετακινούμε ένα δίσκο τη φορά 2) Ένας δίσκος δεν μπορεί να τοποθετηθεί πάνω από μικρότερο δίσκο Η χρήση αναδρομής μας βοηθά να βρούμε μια κομψή λύση στο πρόβλημα.

  28. Αναδρομικοί Αλγόριθμοι Οι Πύργοι του Ανόι 1 3 πάσσαλοι και Ν δίσκοι Ν Συμβολισμός +1 : Μετακίνηση κατά 1πάσσαλο δεξιά. Επιστρέφουμε στον αριστερότερο πάσσαλο αν ξεκινήσουμε από τον δεξιότερο. -1 : Μετακίνηση κατά 1πάσσαλο αριστερά. Επιστρέφουμε στον δεξιότερο πάσσαλο αν ξεκινήσουμε από τον αριστερότερο.

  29. Αναδρομικοί Αλγόριθμοι Οι Πύργοι του Ανόι 1 3 πάσσαλοι και Ν δίσκοι Ν Ιδέα για αναδρομικό αλγόριθμο Ας υποθέσουμε ότι ξέρουμε πώς να μετακινήσουμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο δεξιά ή αριστερά.

  30. Αναδρομικοί Αλγόριθμοι Οι Πύργοι του Ανόι 1 3 πάσσαλοι και Ν δίσκοι Ν Ιδέα για αναδρομικό αλγόριθμο Ας υποθέσουμε ότι ξέρουμε πώς να μετακινήσουμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο δεξιά ή αριστερά. • Μετακινούμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο αριστερά.

  31. Αναδρομικοί Αλγόριθμοι Οι Πύργοι του Ανόι 1 3 πάσσαλοι και Ν δίσκοι Ν Ν-1 Ιδέα για αναδρομικό αλγόριθμο Ας υποθέσουμε ότι ξέρουμε πώς να μετακινήσουμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο δεξιά ή αριστερά. • Μετακινούμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο αριστερά.

  32. Αναδρομικοί Αλγόριθμοι Οι Πύργοι του Ανόι 1 3 πάσσαλοι και Ν δίσκοι Ν Ν-1 Ιδέα για αναδρομικό αλγόριθμο Ας υποθέσουμε ότι ξέρουμε πώς να μετακινήσουμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο δεξιά ή αριστερά. • Μετακινούμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο αριστερά. • Μετακινούμε το δίσκο Ν κατά ένα πάσσαλο δεξιά.

  33. Αναδρομικοί Αλγόριθμοι Οι Πύργοι του Ανόι 1 3 πάσσαλοι και Ν δίσκοι Ν Ν-1 Ιδέα για αναδρομικό αλγόριθμο Ας υποθέσουμε ότι ξέρουμε πώς να μετακινήσουμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο δεξιά ή αριστερά. • Μετακινούμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο αριστερά. • Μετακινούμε το δίσκο Ν κατά ένα πάσσαλο δεξιά.

  34. Αναδρομικοί Αλγόριθμοι Οι Πύργοι του Ανόι 1 3 πάσσαλοι και Ν δίσκοι Ν Ν-1 Ιδέα για αναδρομικό αλγόριθμο Ας υποθέσουμε ότι ξέρουμε πώς να μετακινήσουμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο δεξιά ή αριστερά. • Μετακινούμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο αριστερά. • Μετακινούμε το δίσκο Ν κατά ένα πάσσαλο δεξιά. • Μετακινούμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο αριστερά.

  35. Αναδρομικοί Αλγόριθμοι Οι Πύργοι του Ανόι 1 3 πάσσαλοι και Ν δίσκοι Ν Ιδέα για αναδρομικό αλγόριθμο Ας υποθέσουμε ότι ξέρουμε πώς να μετακινήσουμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο δεξιά ή αριστερά. • Μετακινούμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο αριστερά. • Μετακινούμε το δίσκο Ν κατά ένα πάσσαλο δεξιά. • Μετακινούμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο αριστερά.

  36. Αναδρομικοί Αλγόριθμοι Οι Πύργοι του Ανόι 1 3 πάσσαλοι και Ν δίσκοι Ν Ιδέα για αναδρομικό αλγόριθμο Ας υποθέσουμε ότι ξέρουμε πώς να μετακινήσουμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο δεξιά ή αριστερά. • Μετακινούμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο αριστερά. • Μετακινούμε το δίσκο Ν κατά ένα πάσσαλο δεξιά. • Μετακινούμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο αριστερά. Η μετακίνηση των Ν-1 γίνεται με μαγικό τρόπο!

  37. Αναδρομικοί Αλγόριθμοι Οι Πύργοι του Ανόι 1 3 πάσσαλοι και Ν δίσκοι Ν Ιδέα για αναδρομικό αλγόριθμο Ας υποθέσουμε ότι ξέρουμε πώς να μετακινήσουμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο δεξιά ή αριστερά. • Μετακινούμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο αριστερά. • Μετακινούμε το δίσκο Ν κατά ένα πάσσαλο δεξιά. • Μετακινούμε του πρώτους Ν-1 δίσκους κατά 1 πάσσαλο αριστερά. αναδρομικά! Η μετακίνηση των Ν-1 γίνεται με μαγικό τρόπο!

  38. hanoi(3,+1) void hanoi(int N, int d) { if (N==0) return; hanoi(N-1,-d); shift(N,d); hanoi(N-1,-d); } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  39. hanoi(3,+1) hanoi(2,-1) void hanoi(int N, int d) { if (N==0) return; hanoi(N-1,-d); shift(N,d); hanoi(N-1,-d); } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  40. hanoi(3,+1) hanoi(2,-1) hanoi(1,+1) void hanoi(int N, int d) { if (N==0) return; hanoi(N-1,-d); shift(N,d); hanoi(N-1,-d); } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  41. hanoi(3,+1) hanoi(2,-1) hanoi(1,+1) hanoi(0,-1) void hanoi(int N, int d) { if (N==0) return; hanoi(N-1,-d); shift(N,d); hanoi(N-1,-d); } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  42. hanoi(3,+1) hanoi(2,-1) hanoi(1,+1) hanoi(0,-1) shift(1,+1) void hanoi(int N, int d) { if (N==0) return; hanoi(N-1,-d); shift(N,d); hanoi(N-1,-d); } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  43. hanoi(3,+1) hanoi(2,-1) hanoi(1,+1) hanoi(0,-1) shift(1,+1) hanoi(0,-1) void hanoi(int N, int d) { if (N==0) return; hanoi(N-1,-d); shift(N,d); hanoi(N-1,-d); } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  44. hanoi(3,+1) hanoi(2,-1) hanoi(1,+1) hanoi(0,-1) shift(1,+1) hanoi(0,-1) shift(2,-1) void hanoi(int N, int d) { if (N==0) return; hanoi(N-1,-d); shift(N,d); hanoi(N-1,-d); } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  45. hanoi(3,+1) hanoi(2,-1) hanoi(1,+1) hanoi(0,-1) shift(1,+1) hanoi(0,-1) shift(2,-1) hanoi(1,+1) void hanoi(int N, int d) { if (N==0) return; hanoi(N-1,-d); shift(N,d); hanoi(N-1,-d); } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  46. hanoi(3,+1) hanoi(2,-1) hanoi(1,+1) hanoi(0,-1) shift(1,+1) hanoi(0,-1) shift(2,-1) hanoi(1,+1) hanoi(0,-1) void hanoi(int N, int d) { if (N==0) return; hanoi(N-1,-d); shift(N,d); hanoi(N-1,-d); } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  47. hanoi(3,+1) hanoi(2,-1) hanoi(1,+1) hanoi(0,-1) shift(1,+1) hanoi(0,-1) shift(2,-1) hanoi(1,+1) hanoi(0,-1) shift(1,+1) void hanoi(int N, int d) { if (N==0) return; hanoi(N-1,-d); shift(N,d); hanoi(N-1,-d); } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  48. hanoi(3,+1) hanoi(2,-1) hanoi(1,+1) hanoi(0,-1) shift(1,+1) hanoi(0,-1) shift(2,-1) hanoi(1,+1) hanoi(0,-1) shift(1,+1) hanoi(0,-1) void hanoi(int N, int d) { if (N==0) return; hanoi(N-1,-d); shift(N,d); hanoi(N-1,-d); } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  49. hanoi(3,+1) hanoi(2,-1) hanoi(1,+1) hanoi(0,-1) shift(1,+1) hanoi(0,-1) shift(2,-1) hanoi(1,+1) hanoi(0,-1) shift(1,+1) hanoi(0,-1) shift(3,+1) void hanoi(int N, int d) { if (N==0) return; hanoi(N-1,-d); shift(N,d); hanoi(N-1,-d); } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  50. hanoi(3,+1) hanoi(2,-1) hanoi(1,+1) hanoi(0,-1) shift(1,+1) hanoi(0,-1) shift(2,-1) hanoi(1,+1) hanoi(0,-1) shift(1,+1) hanoi(0,-1) shift(3,+1) hanoi(2,-1) void hanoi(int N, int d) { if (N==0) return; hanoi(N-1,-d); shift(N,d); hanoi(N-1,-d); } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

More Related