Κεφάλαιο 5 Ανάλυση Αλγορίθμων 5.1 Επίδοση αλγορίθμων Τα πρωταρχικά ερωτήματα που προκύπτουν είναι: 1. πώς υπολογίζεται ο χρόνος εκτέλεσης ενός αλγορίθμου; 2. πώς μπορούν να συγκριθούν μεταξύ τους οι διάφοροι αλγόριθμοι; 3. πώς μπορεί να γνωρίζει κανείς, αν ένας αλγόριθμος είναι "βέλτιστος"; 1
5.1.1 Χειρότερη περίπτωση ενός αλγορίθμου Με κάποιες συγκεκριμένες τιμές εισόδου σε έναν αλγόριθμο, προκύπτει το μέγιστο κόστος εκτέλεσης του αλγορίθμου και ισούται με τον μέγιστο αριθμό των βασικών πράξεων (π.χ. εκχώρηση, σύγκριση, πράξη). 2
5.1.2 Μέγεθος εισόδου ενός αλγορίθμου Kάποια ή κάποιες μεταβλητές εκφράζουν το μέγεθος (size) του αλγορίθμου. 3
5.1.3 Χρόνος εκτέλεσης προγράμματος ενός αλγορίθμου Οι βρόχοι επανάληψης αποτελούν το κρίσιμο σημείο για τον χαρακτηρισμό της επίδοσης ενός αλγορίθμου Έτσι αν ο αλγόριθμος αυτός γενικευθεί ώστε ο βρόχος να εκτελεσθεί n φορές, ο χρόνος εκτέλεσης θα εξαρτάται από το μέγεθος του n. 4
5.1.4 Αποδοτικότητα αλγορίθμων Αν η επίλυση ενός προβλήματος επιτυγχάνεται με τη χρήση δύο ή περισσοτέρων αλγορίθμων, χρειάζεται να γίνει η επιλογή του καταλληλότερου με βάση την αποδοτικότητά τους με βασικούς παράγοντες την ταχύτητα και το μέγεθος της απαιτούμενης μνήμης. Όταν συγκρίνονται δύο αλγόριθμοι, θα πρέπει να συγκρίνονται με χρήση των ίδιων δεδομένων και κάτω από τις ίδιες συνθήκες. Ο χρόνος εκτέλεσης κάθε αλγορίθμου εξαρτάται από τα εξής: 1. Τύπος ΗΥ 2. Γλώσσα προγραμματισμού 3. Δομή προγράμματος και δομές δεδομένων 4. Χρόνος πρόσβασης στο δίσκο και στις ενέργειες εισόδου-εξόδου 5. Είδος συστήματος (ενός χρήστη ή πολλών χρηστών) 5
5.1.4 Αποδοτικότητα αλγορίθμων Προϋποθέσεις σύγκρισης μεταξύ δύο προγραμμάτων: 1. ίδια γλώσσα προγραμματισμού 2. ίδιος μεταφραστής 3. ίδια υπολογιστική πλατφόρμα 4. ίδια δεδομένα εισόδου κατά τον έλεγχο 6
5.3 Πολυπλοκότητα αλγορίθμων Τρόποι μέτρησης της επίδοσης ενός αλγορίθμου α) εμπειρικός (empirical) ή αλλιώς ο λεγόμενος εκ των υστέρων (a posteriori). ο αλγόριθμος εφαρμόζεται σε ένα σύνολο δεδομένων, ώστε να υπολογισθεί: ο απαιτούμενος χρόνος επεξεργασίας (processing time) και η χωρητικότητα μνήμης (memory space) Μειονεκτήματα - λόγοι λανθασμένων εκτιμήσεων: 1. δύσκολη η πρόβλεψη της συμπεριφοράς του αλγορίθμου για άλλο σύνολο δεδομένων 2. ο χρόνος επεξεργασίας εξαρτάται από το υλικό, τη γλώσσα προγραμματισμού και το μεταφραστή και τη δεινότητα του προγραμματιστή. 7
5.3 Πολυπλοκότητα αλγορίθμων β) θεωρητικός (theoretical) ή αλλιώς ο λεγόμενος εκ των προτέρων (a priori) στον οποίο εισάγεται μία μεταβλητή n, που εκφράζει το μέγεθος (size) του προβλήματος. π.χ. αν το πρόβλημα είναι η ταξινόμηση k στοιχείων τότε n=k. Μία συνάρτηση f(n) εκφράζει τη χρονική πολυπλοκότητα (time complexity) ή την πολυπλοκότητα χώρου (space complexity) χωρίς να ενδιαφέρουν οι επακριβείς τιμές αλλά μόνο η γενική συμπεριφορά των αλγορίθμων, δηλαδή η τάξη του αλγορίθμου Ο (Onotation) order. Ορισμός: Αν η πολυπλοκότητα ενός αλγορίθμου είναι f(n), τότε λέγεται ότι είναι τάξης O(g(n)), αν υπάρχουν δύο θετικοί ακέραιοι c και n 0, έτσι ώστε για κάθε n n 0 να ισχύει: f(n) c g(n) Ο συμβολισμός Ο δίνει ένα άνω φράγμα για την πολυπλοκότητα ενός αλγορίθμου. 8
5.3 Πολυπλοκότητα αλγορίθμων π.χ.1. έστω ότι η πολυπλοκότητα ενός αλγορίθμου είναι f(n)=2n 3 +5n 2-4n+3. Ο πιο σημαντικός όρος (που έχει το μεγαλύτερο «ειδικό βάρος») του πολυωνύμου είναι η τρίτη δύναμη η πολυπλοκότητα του αλγορίθμου είναι O(n 3 ) π.χ.2. έστω ότι η πολυπλοκότητα ενός αλγορίθμου είναι f(n) = 5 2 n +4n 2-4logn Ο πιο σημαντικός όρος του πολυωνύμου είναι το 2 n η πολυπλοκότητα του αλγορίθμου είναι O(2 n ) 9
5.3 Πολυπλοκότητα αλγορίθμων Κατηγορίες πολυπλοκότητας Ο(1): σταθερή πολυπλοκότητα όπου κάθε εντολή εκτελείται μία φορά ή το πολύ μερικές μόνο φορές O(logn): λογαριθμική πολυπλοκότητα όπου "log" ο δυαδικός λογάριθμος O(n): γραμμική πολυπλοκότητα. Η καλύτερη επίδοση για έναν αλγόριθμο που πρέπει να εξετάσει ή να δώσει στην έξοδο n στοιχεία. Ο(n logn): Διαβάζεται όπως ακριβώς γράφεται. Στην κατηγορία αυτή ανήκει μία πολύ σπουδαία οικογένεια αλγορίθμων ταξινόμησης. Ο(n 2 ): τετραγωνική πολυπλοκότητα. Ο(n 3 ): κυβική πολυπλοκότητα Ο(2 n ): εκθετική πολυπλοκότητα Οι τρεις τελευταίες πρέπει να χρησιμοποιούνται μόνο για προβλήματα μικρού μεγέθους. 10
5.3 Πολυπλοκότητα αλγορίθμων Εάν κάθε στοιχειώδης πράξη απαιτεί ένα μικροδευτερόλεπτο: Σκοπός κατά την ανάλυση των αλγορίθμων δεν είναι μόνο να σχεδιάσουμε έναν αλγόριθμο, αλλά και να διαπιστώσουμε την επίδοση του, δηλαδή να εκφράσουμε την πολυπλοκότητά του με το συμβολισμό Ο. 11
5.3.1 Ταξινόμηση ευθείας ανταλλαγής 5.3.2 Γραμμική αναζήτηση 12
Τέλος Κεφ. 5 13