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

Σχετικά έγγραφα
Διάλεξη 17η: Ταξινόμηση και Αναζήτηση

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

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

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

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

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

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

Προγραμματιστικές Τεχνικές

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Αρχές Ανάλυσης Αλγορίθµων Κεφάλαιο 2. Ε. Μαρκάκης Επικ. Καθηγητής

Α Ν Α Λ Τ Η Α Λ Γ Ο Ρ Ι Θ Μ Ω Ν Κ Ε Υ Α Λ Α Ι Ο 5. Πως υπολογίζεται ο χρόνος εκτέλεσης ενός αλγορίθμου;

Κεφάλαιο 5 Ανάλυση Αλγορίθμων

8. Σωροί (Heaps)-Αναδρομή- Προχωρημένη Ταξινόμηση

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

5.1. Προσδοκώμενα αποτελέσματα

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

Ανάλυση αλγορίθμων. Χρόνος εκτέλεσης: Αναμενόμενη περίπτωση. - απαιτεί γνώση της κατανομής εισόδου

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

Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 6 Ο. Συναρτήσεις Τοπικές, καθολικές, στατικές μεταβλητές Μεταβλητές τύπου extern και register Αναδρομή

Τι είναι αλγόριθμος; Υποπρογράμματα (υποαλγόριθμοι) Βασικές αλγοριθμικές δομές

ΣΧΕΔΙΑΣΗ ΚΑΙ ΥΛΟΠΟΙΗΣΗ ΛΟΓΙΣΜΙΚΟΥ

Διάλεξη 5η: Εντολές Επανάληψης

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

Αναζήτηση. 1. Σειριακή αναζήτηση 2. Δυαδική Αναζήτηση. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

Πληροφορική 2. Αλγόριθμοι

Διαίρει-και-Βασίλευε. Διαίρει-και-Βασίλευε. MergeSort. MergeSort. Πρόβλημα Ταξινόμησης: Είσοδος : ακολουθία n αριθμών (α 1

Προγραμματισμός Ι (ΗΥ120)

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

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

Αναδρομικές Σχέσεις «ιαίρει-και-βασίλευε»

Αλγόριθμοι Ταξινόμησης Μέρος 2

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

ΗΥ-150. Ταξινόµηση και Αναζήτηση

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

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

auth Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

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

Ανάπτυξη και Σχεδίαση Λογισμικού

Δομές Δεδομένων Ενότητα 2

Εισαγωγή στον Προγραμματισμό

Αν ένα πρόβλημα λύνεται από δύο ή περισσότερους αλγόριθμους, ποιος θα είναι ο καλύτερος; Με ποια κριτήρια θα τους συγκρίνουμε;

τις αναδρομικές ακολουθίες (recursive sequences) στις οποίες ορίζαμε

Ταξινόμηση. 1. Στατιστικά Διάταξης 2. Στατιστικά σε Μέσο Γραμμικό Χρόνο. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

Προγραμματιστικές Τεχνικές

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Mergesort Κεφάλαιο 8. Ε. Μαρκάκης Επίκουρος Καθηγητής

Ταξινόμηση με συγχώνευση Merge Sort

Εισαγωγή στον δομημένο προγραμματισμό

I. ΑΛΓΟΡΙΘΜΟΣ II. ΠΡΑΞΕΙΣ - ΣΥΝΑΡΤΗΣΕΙΣ III. ΕΠΑΝΑΛΗΨΕΙΣ. 1. Τα πιο συνηθισμένα σενάρια παραβίασης αλγοριθμικών κριτηρίων είναι:

Διαίρει-και-Βασίλευε. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Διαίρει-και-Βασίλευε 2

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

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

Αλγόριθμοι και Πολυπλοκότητα

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

Διάλεξη 15η: Αναδρομή, μέρος 1ο

Διάλεξη 04: Παραδείγματα Ανάλυσης

Εισαγωγή στους Αλγορίθμους

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ.

Εργαστηριακή Άσκηση 1

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων

Σημειωματάριο μαθήματος 1ης Νοε. 2017

Ουρές Προτεραιότητας: Υπενθύμιση. Σωροί / Αναδρομή / Ταξινόμηση. Υλοποίηση Σωρού. Σωρός (Εισαγωγή) Ορέστης Τελέλης

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 8ο Αλγόριθμοι

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

Σε γενικές γραμμές, είναι καλή πρακτική να γράϕουμε προγράμματα C που αποτελούνται από πολλές και μικρές συναρτήσεις, παρά από λίγες και μεγάλες.

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

Εισαγωγή στην Ανάλυση Αλγορίθμων (2-3)

Επιμέλεια διαφανειών: Δ. Φωτάκης Τροποποιήσεις-προσθήκες: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

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

ιαίρει-και-βασίλευε ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Quicksort. Επιμέλεια διαφανειών: Δ. Φωτάκης Μικροαλλαγές: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Εισαγωγή στην Ανάλυση Αλγορίθμων (1) Διαφάνειες του Γ. Χ. Στεφανίδη

Για τις λύσεις των προβλημάτων υπάρχει τρόπος εκτίμησης της επίδοσης (performance) και της αποδοτικότητας (efficiency). Ερωτήματα για την επίδοση

Quicksort [Hoare, 62] Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Quicksort 1

Αναζήτηση και ταξινόμηση

Προγραμματισμός Η/Y. Διάλεξη 6 η : Συναρτήσεις

Δομημένος Προγραμματισμός

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

Ενότητα 1: Εισαγωγή Ασκήσεις και Λύσεις

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2

Αλγόριθµοι και Πολυπλοκότητα

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΪΟΥ

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

Δοµές Δεδοµένων. 10η Διάλεξη Ταξινόµηση. E. Μαρκάκης

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #3

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

Εργαστήριο 2: Πίνακες

1o Φροντιστήριο ΗΥ240

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

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

Ποσοτικές Μέθοδοι στη Διοίκηση Επιχειρήσεων ΙΙ Σύνολο- Περιεχόμενο Μαθήματος

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

Quicksort. Πρόβλημα Ταξινόμησης. Μέθοδοι Ταξινόμησης. Συγκριτικοί Αλγόριθμοι

Transcript:

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

Παράδειγμα: Υπολογισμός του παραγοντικού Ορισμός του n! n! = n x (n - 1) x x 2 x 1 Ο παραπάνω ορισμός μπορεί να γραφεί ως n! = 1 αν n = 0 n x (n -1)! αλλιώς

Παράδειγμα (συνέχ). Στον εναλλακτικό ορισμό, ο υπολογισμός του n! (σύνθετο πρόβλημα) ανάγεται στον υπολογισμό του (n-1)! (απλούστερο πρόβλημα).

Αναδρομή Στρατηγική επίλυσης προβλημάτων Τεχνική προγραμματισμού σύμφωνα με την οποία ένα σύνθετο πρόβλημα ανάγεται σε ένα απλούστερο της ίδιας μορφής. Είναι μια παράξενη, μη διαισθητική τεχνική η οποία στην αρχή δυσκολεύει τους προγραμματιστές Σε κάθε περίπτωση όπου χρησιμοποιείται αναδρομή, είναι δυνατόν, εναλλακτικά, να χρησιμοποιηθεί επανάληψη Η χρήση της αναδρομής προσφέρει, σε κάποιες περιπτώσεις, απλούστερες λύσεις.

Η αναδρομή στη C Η αναδρομή στη C πραγματοποιείται ορίζοντας συναρτήσεις που καλούν τον εαυτό τους (άμεση αναδρομή). Υποστηρίζεται και η έμμεση αναδρομή

Παράδειγμα: Η συνάρτηση Factorial int Factorial(int n) { } if (n == 0) return 1; return (n * Factorial(n-1));

Παράδειγμα κλήσης της Factorial Factorial(3) Return(6) return (3 * Factorial(2)) return (3 * 2) return (2 * Factorial(1)) return (2 * 1) return (1 * Factorial(0)) return (1 * 1) return (1)

Επαναληπτική υλοποίηση int Factorial(int n) { int i, result; result = 1; for (i = 2; i<= n; i++) { result = result * i; } return result; }

συνάρτηση() { Βασική δομή αναδρομικής συνάρτησης } if (έλεγχος απλής περίπτωσης) { return (απλή λύση χωρίς τη χρήση αναδρομής); } else { return (αναδρομική κλήση που απαιτεί την κλήση της ίδιας συνάρτησης);

Ένα παράδειγμα: Συνάρτηση ύψωσης στη δύναμη static int RaiseIntToPower(int n, int k) { /* Έλεγχος απλής περίπτωσης */ if (k ==0) { return (1); } else { /* Αναδρομική κλήση της ίδιας συνάρτησης */ return (n * RaiseIntToPower(n, k-1)); } }

Κατά τη χρήση της αναδρομής Βρίσκουμε τη λύση για την απλή περίπτωση. «Φανταζόμαστε» ότι έχουμε βρει τη λύση για μια (ή περισσότερες) απλούστερες περιπτώσεις Με βάση τις παραπάνω απλούστερες περιπτώσεις, συνθέτουμε τη λύση για τη γενικότερη περίπτωση

Τι θα συμβεί αν λείπει ο έλεγχος της απλής περίπτωσης; Τι κάνει το παρακάτω πρόγραμμα; main() { inc(1);} int inc(int k) { } k++; inc(k);

Περίπτωση «ατέρμονος» αναδρομής Θεωρητικά, η προηγούμενη συνάρτηση, inc, όταν κληθεί, καλεί επ άπειρον τον εαυτό της Το πρόγραμμα μπαίνει σε μια ατέρμονα επανάληψη («κολλάει») Πρακτικά, μετά από κάποιο χρόνο το πρόγραμμα τερματίζει εμφανίζοντας ένα μήνυμα σφάλματος. π.χ. Stack overflow ή Segmentation Fault

Γιατί συμβαίνει αυτό; Σε κάθε κλήση συνάρτησης (αναδρομική ή όχι) δεδομένα εγγράφονται σε μια περιοχή της μνήμης που ονομάζεται Στοίβα (Stack). Τέτοια δεδομένα είναι: Οι τιμές των πραγματικών παραμέτρων Η διεύθυνση επιστροφής Τοπικές μεταβλητές Μετά από ένα μεγάλο αριθμό αναδρομικών κλήσεων η στοίβα υπερχειλίζει (overflow) και το πρόγραμμα τερματίζει με την εμφάνιση κατάλληλου μηνύματος.

Περίπτωση άπειρων αναφορών μιας οντότητας στον εαυτό της inc inc inc inc

Μαθηματικά Η μαθηματική επαγωγή, ως μέθοδος απόδειξης, είναι μια περίπτωση αναδρομής

Η αναδρομή στην Τέχνη Μ.C. Escher, Circle limit IV Regular Division of the Plane VI

Η αναδρομή στην Τέχνη M. C. Escher, Square Limit Circle Limit III

Fractals

Αρχιτεκτονική/Γλυπτική http://www.theverymany.net/2006_05_01_archive.html

Αρχιτεκτονική St. Joseph's Church, Havre Auguste Perret (and R. Audigier) 1953-57

Τρίγωνο Sierpinski Fractals (2)

Δένδρο Fractal (1)

Δένδρο Fractal (2)

Αναδρομή στη φύση (1)

Αναδρομή στη φύση (2)

Κούκλες «Μπαμπούσκα» Μια κούκλα μέσα σε μια ίδια κούκλα Μια συνάρτηση καλείται από μια «ίδια» συνάρτηση

Άλλα πεδία όπου είναι δυνατόν να προκύψει αναδρομή Λογοτεχνία Γλώσσα Μουσική

Παράδειγμα: Αριθμοί Fibonacci int fib(int n) { if (n==0) return 0; if (n==1) return 1; return (fib(n-1) + fib(n-2)); }

Πλήρες πρόγραμμα #include <stdio.h> int fib(int n) { if (n==0) return 0; if (n==1) return 1; return (fib(n-1) + fib(n-2)); } main() { int x; while(1){ scanf("%d",&x); if (x<0) return; printf("%d\n", fib(x)); } }

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

Αξιολόγηση της αποδοτικότητας αλγορίθμων Πόσο γρήγορα εκτελείται ένας αλγόριθμος; Η αξιολόγηση της σχετικής αποδοτικότητας αλγορίθμων είναι γνωστή ως ανάλυση αλγορίθμων Σχετική αποδοτικότητα Πόσο αποδοτικότερος είναι ένας αλγόριθμος σε σχέση με έναν άλλον

Σχετική αποδοτικότητα Δεν ενδιαφέρει η απόλυτη ταχύτητα εκτέλεσης ενός αλγορίθμου καθώς εξαρτάται από την ταχύτητα του εκάστοτε υπολογιστή στον οποίο εκτελείται τη γλώσσα προγραμματισμού στον οποίο είναι υλοποιημένος άλλους παράγοντες

Υπολογιστική πολυπλοκότητα Πόσο ποιο αργή είναι η ταξινόμηση ενός πίνακα 1000 στοιχείων σε σχέση με την ταξινόμηση ενός πίνακα 10000 στοιχείων; Το μέγεθος ενός προβλήματος (π.χ. το μέγεθος του πίνακα) παριστάνεται με το Ν Η σχέση του Ν και του χρόνου εκτέλεσης ενός αλγορίθμου, όταν το Ν είναι μεγάλο, ονομάζεται υπολογιστική πολυπλοκότητα του συγκεκριμένου αλγορίθμου.

Μέτρο πολυπλοκότητας Στην επιστήμη των υπολογιστών χρησιμοποιείται ένας ειδικός συμβολισμός που παριστάνει το μέτρο της πολυπλοκότητας ενός αλγορίθμου. Συμβολισμός του μεγάλου όμικρον O (από τη λέξη Order (τάξη). Παραδείγματα Ο(1), O(N 2 ), O(logN), κ.λπ.

Παραδείγματα: Ο(1) Ένας αλγόριθμος για την εύρεση του πρώτου στοιχείου ενός πίνακα δεν εξαρτάται από το μέγεθος του πίνακα. Λέμε ότι ο αλγόριθμος εκτελείται σε σταθερό χρόνο Ο σταθερός χρόνος συμβολίζεται ως O(1)

Παραδείγματα: Ο(Ν) Αλγόριθμος γραμμικής αναζήτησης ενός στοιχείου σε έναν πίνακα: Για έναν πίνακα με Ν στοιχεία χρειάζονται N βήματα (συγκρίσεις) Ο αλγόριθμος εκτελείται σε γραμμικό χρόνο. Ο γραμμικός χρόνος εκτέλεσης συμβολίζεται ως O(N).

Παραδείγματα: Ο(logN) Αλγόριθμος δυαδικής αναζήτησης ενός στοιχείου σε έναν πίνακα: Για έναν πίνακα με Ν στοιχεία χρειάζονται (περίπτου) log 2 N βήματα (συγκρίσεις) Ο αλγόριθμος εκτελείται σε λογαριθμικό χρόνο. Ο γραμμικός χρόνος εκτέλεσης συμβολίζεται ως O(logN).

Παράδειγμα: Ο(Ν 2 ) Ο αλγόριθμος της ταξινόμησης με επιλογή εκτελείται σε N 1 Ν Ν 1 Ν 2.. 3 2 1= i=0 N i = N 2 N 2 Στον παραπάνω τύπο: Απαλοίφονται οι όροι που δεν είναι σημαντικοί για μεγάλες τιμές του Ν Απαλοίφονται σταθεροί συντελεστές Η επίδοση του αλγορίθμου είναι Ο(Ν 2 ). Λέμε ότι ο αλγόριθμος εκτελείται σε τετραγωνικό χρόνο.

Παράδειγμα: Ο(NlogN) Ο αλγόριθμος ταξινόμησης με συγχώνευση Ο πίνακας διαιρείται σε δύο υπο-πίνακες μισού μεγέθους από τον αρχικό Αν ο πίνακας δεν έχει κανένα ή έχει μόνο ένα στοιχείο τότε είναι ταξινομημένος Οι δύο υποπίνακες ταξινομούνται (αναδρομικά) Οι δύο ταξινομημένοι υποπίνακες συγχωνεύονται Αλγόριθμος διαίρει και βασίλευε. Ο χρόνος εκτέλεσης του αλγορίθμου είναι Nlog 2 N

Ανάλυση του αλγορίθμου Απαιτούνται Ν βήματα στο πρώτο επίπεδο 2 N/2 βήματα στο δεύτερο επίπεδο 4 Ν/4 βήματα στο τρίτο επίπεδο 8 Ν/8 βήματα στο τέταρτο επίπεδο... Ο χρόνος εκτέλεσης του αλγορίθμου είναι Nlog 2 N

{ right) int i, last; if (left>= right) return; swap(v,left, left+right)/2); last = left; for (i = left+1; i <= right; i++) if (v[i] < v[left]) { last++; swap(v, last, i); } qsort(v,left, last-1); qsort(v, last+1, right); }

Μέτρο πολυπλοκότητας (συνέχ.) Με τον παραπάνω συμβολισμό ορίζονται κατηγορίες (κλάσεις) αλγορίθμων ανάλογα με τον χρόνο εκτέλεσής τους. Έτσι, δύο αλγόριθμοι που εκτελούνται σε γραμμικό χρόνο λέμε ανήκουν στην κλάση Ο(Ν) Στην περίπτωση αυτή λέμε ότι οι αλγόριθμοι είναι O(N)