2-1 Ανάλυση Αλγορίθμων Αλγόριθμος Πεπερασμένο σύνολο εντολών που, όταν εκτελεστούν, επιτυγχάνουν κάποιο επιθυμητό αποτέλεσμα –Δεδομένα εισόδου και εξόδου –Κάθε εντολή πρέπει να είναι: καλά ορισμένη απλή –Η εκτέλεση πρέπει να σταματά Για να αναλύσουμε τον χρόνο που κάνει ένας αλγόριθμος για να υπολογίσει το αποτέλεσμά του, θα επινοήσουμε ένα υπολογιστικό μοντέλο που βασίζεται σε έξι αξιώματα
2-2 Λεπτομερές Υπολογιστικό Μοντέλο 6 αξιώματα –Χρόνος για την φόρτωση / αποθήκευση δεδομένων –Χρόνος για αριθμητικές και λογικές πράξεις –Χρόνος για κλήση και επιστροφή συνάρτησης –Χρόνος για το πέρασμα παραμέτρων σε μια συνάρτηση –Χρόνος για τη προσπέλαση στοιχείων διανύσματος –Χρόνος για τη δημιουργία/κατασκευή δεδομένων (π.χ. Δέσμευση μνήμης, κατασκευή αντικειμένων κλπ.) Υπάρχει διαφορά ανάμεσα σε ένα μοντέλο και τη πραγματικότητα Θεωρούμε για απλότητα ότι όλα τα δεδομένα είναι ακέραιοι αριθμοί ΄ή απλοί τύποι
2-3 Αξίωμα 1: Φόρτωση / Αποθήκευση Ο χρόνος που απαιτείται για τη φόρτωση δεδομένων από τη δυναμική μνήμη του υπολογιστή σε μια μεταβλητή είναι σταθερός και ίσος με fetch Ο χρόνος που απαιτείται για την αποθήκευση ενός αποτελέσματος στη δυναμική μνήμη του υπολογιστή είναι σταθερός και ίσος με store.
2-4 Αξίωμα 2: Βασικές Λειτουργίες Ο χρόνος που χρειάζεται για να εκτελεστούν βασικές λειτουργίες όπως για παράδειγμα πρόσθεση, αφαίρεση, πολλαπλασιασμός, διαίρεση, σύγκριση είναι σταθερός και ίσος με +, -, ×, ÷, <, αντίστοιχα.
2-5 Αξίωμα 3: Κλήση / Επιστροφή Συνάρτησης Ο χρόνος που απαιτείται για τη κλήση μιας συνάρτησης είναι σταθερός και ίσος με cal Όμοια ο χρόνος που απαιτείται για την επιστροφή από μια συνάρτηση πίσω στο σημείο κλήσης μετά τη περάτωση της συνάρτησης είναι σταθερός και ίσος με return.
2-6 Αξίωμα 4: Πέρασμα Παραμέτρων Ο χρόνος που απαιτείται να περάσει μια παράμετρος σε μια συνάρτηση είναι σταθερός και ίσος με το χρόνο αποθήκευσης των δεδομένων μιας μεταβλητής στη δυναμική μνήμη του υπολογιστή store.
2-7 Παράδειγμα: Χρόνος Εκτέλεσης Προγράμματος
2-8
2-9 Αξίωμα 5: Προσπέλαση Στοιχείου Διανύσματος Ο χρόνος που απαιτείται για το υπολογισμό θέσης στοιχείου διανύσματος (π.χ. a[i]), είναι σταθερός και ίσος με [·]. Αυτός ο χρόνος δεν περιλαμβάνει το χρόνο υπολογισμού του δείκτη θέσης (π.χ. της έκφρασης i+j κατα τη διάρκεια προσπέλασης του στοιχείου a[i+j]), ούτε το χρόνο φόρτωσης / αποθήκευσης του στοιχείου του διανύσματος
2-10 Παράδειγμα: Υπολογισμός Τιμής Πολυωνύμου
2-11
2-12 Ανάλυση Αναδρομικών Συναρτήσεων Το παραγοντικό ενός μη αρνητικού ακεραίου n ορίζεται ως Μπορούμε να ορίσουμε το παραγοντικό αναδρομικά ως
2-13
2-14
2-15 Αναδρομικές Σχέσεις
2-16 Επίλυση της Αναδρομής
2-17 Αξίωμα 6: Κατασκευή Δεδομένων Ο χρόνος δημιουργίας δεδομένων (απλών τύπων) είναι σταθερός και ίσος με new. Ο χρόνος αυτός δεν περιλαμβάνει αρχικοποιήσεις τιμών
2-18 Ανάλυση με τη Χρήση Απλουστευμένου Μοντέλου Η ανάλυση του χρόνου εκτέλεσης ενός αλγόριθμου μπορεί να επιτευχθεί εύκολα εάν απλουστεύσουμε το μοντέλο μας και θεωρήσουμε ότι όλοι οι χρόνοι που είδαμε παραπάνω είναι σταθεροί και ίσοι με μια μονάδα χρόνου
2-19 Επισκόπηση: Αριθμητικές και Γεωμετρικές Σειρές Αριθμητική σειρά: 1, 2, 3,.... Άθροιση Γεωμετρική σειρά 1, a, a 2, a 3,.... Άθροιση
2-20 Παράδειγμα: Άθροιση Αριθμητικής Σειράς
2-21
2-22 Παράδειγμα Αλγόριθμος 1 (Απλός): Άθροισμα Γ.Σ.
2-23 3\
2-24 Παράδειγμα Αλγόριθμος 1 (Horner): Άθροισμα Γ.Σ.
2-25
2-26 Παράδειγμα Αλγόριθμος 3 (Αναδρομικός): Άθροισμα Γ.Σ.
2-27
2-28 Σύγκριση Χρόνου Εκτέλεσης των Παραπάνω Αλγορίθμων
2-29
2-30 Ασυμπτωτική Ανάλυση Αλγορίθμων Η Ασυμπτωτική Ανάλυση Αλγορίθμων μας επιτρέπει να συγκρίνουμε αλγόριθμους (χρόνο εκτέλεσης, χρήση μνήμης κλπ.) με τρόπο που να είναι ανεξάρτητος του υπολογιστή, λειτουργικού συστήματος, συμβολομεταφραστή κ.α.
2-31 Σημειολογία Ασυμπτωτικό άνω όριοO(.) [big oh] –Σφιχτό ασυμπτωτικό άνω όριο Ασυμπτωτικό κάτω όριο (.) [omega] Ασυμπτωτικό ακριβές όριο (.) [theta] Χαλαρό ασυμπτωτικό άνω όριοo(.) [little oh]
2-32 Ορισμός Ασυμπτωτικού Άνω Ορίου Ο() - Big Oh Ας θεωρήσουμε μια συνάρτηση f(n) η οποία είναι θετική για όλες τις τιμές του ορίσματος n ≥ 0. Λέμε ότι η “f(n) είναι big oh g(n),” και το γράφουμε σαν f(n) = O(g(n)), εάν υπάρχει ακέραιος αριθμός n 0 και μια σταθερά c > 0 τέτοια ώστε, για όλους τους ακεραίους n ≥ n 0, είναι f(n) ≤ cg(n).
2-33
2-34 Ιδιότητες του Big Oh Μεταβατικότητα –Εάν f(n) = O(g(n)) και g(n) = O(h(n)) τότε f(n) = O(h(n)) Προσθετικότητα –Εάν f 1 (n) = O(g 1 (n)) και f 2 (n) = O(g 2 (n)), τότε f 1 (n) + f 2 (n) = O(max(g 1 (n), g 2 (n))) Πολλαπλασιατικότητα –Εάν f 1 (n)=O(g 1 (n)), f 2 (n)=O(g 2 (n)), τότε f 1 (n)×f 2 (n)=O(g 1 (n)×g 2 (n)). –Εάν f 1 (n)=O(g 1 (n)) και g 2 (n) είναι θετική για τους ακεραίους n ≥ 0, τότε f 1 (n) × g 2 (n) = O(g 1 (n) × g 2 (n)).
2-35 Ο Κανόνας του Ορίου
2-36 Big Oh για Κοινές Συναρτήσεις Πολυώνυμα Λογάριθμοι Για κάθε ακέραιο k ≥ 1, log k n = O(n)
2-37 Σφιχτό Ασυμπτωτικό Άνω Όριο Ας θεωρήσουμε τη συνάρτηση f(n) όπου f(n) = O(g(n)). Εάν για κάθε συνάρτηση h(n) τέτοια ώστε f(n) = O(h(n)) είναι επίσης αληθές ότι g(n) = O(h(n)), τότε λέμε ότι η g(n) είναι ένα σφιχτό ασυμτωτικό άνω όριο της συνάρτησης f(n).
2-38 Κοινά Λάθη / Παρανοήσεις Δεδομένου ότι εάν f 1 (n) = O(g(n)) και f 2 (n) = O(g(n)), τότε f 1 (n) = f 2 (n). (ΛΑΘΟΣ) Εάν f(n) = O(g(n)), τότε g(n) = O -1 (f(n)) (ΛΑΘΟΣ)
2-39 Κοινά Λάθη / Παρανοήσεις Big Oh - Επακόλουθο –Δεδομένων των μη αρνητικών συναρτήσεων f 1 (n), f 2 (n), g 1 (n), και g 2 (n), τέτοιων ώστε f 1 (n) = O(g 1 (n)), f 2 (n) = O(g 2 (n)), και δεδομένου ότι για κάθε ακέραιο n ≥ 0, g 1 (n) < g 2 (n), τότε f 1 (n) < f 2 (n). (ΛΑΘΟΣ) Πολλαπλασιαστικός Παράγων –Δεδομένων των μη αρνητικών συναρτήσεων f(n), g 1 (n), και g 2 (n), τέτοιων ώστε f(n) = g 1 (n) × g 2 (n) και f(n) ≤ cg 1 (n) για όλους τους ακεραίους n ≥ 0, τότε εάν θεωρήσουμε c = g 2 (n), τότε f(n) = O(g 1 (n)). (ΛΑΘΟΣ) Ολική Διάταξη –Δεδομένων δύο μη αρνητικών συναρτήσεων f(n) and g(n) τότε είτε ισχύει f(n) = O(g(n)) ή g(n) = O(f(n)). (ΛΑΘΟΣ)
2-40 Σύμβαση για τη Παρουσίαση Ασυμπτωτικού Άνω Ορίου Κρατάμε μόνο τους πλέον σημαντικούς όρους – π.χ αντί να γράψουμε O(n 2 +n log n+n), γράφουμε O(n 2 ) Απαλείφουμε τους σταθερούς όρους – Αντί να γράψουμε O(3n 2 ), γράφουμε O(n 2 ) – Αντί να γράψουμε O(1204), γράφουμε O(1)
2-41
2-42 Ασυμπτωτικό Κάτω Όριο — Omega Εάν θεωρήσουμε τη συνάρτηση f(n) η οποία είναι μη αρνητική για όλους τους ακεραίους n ≥ 0. Λέμε ότι η “f(n) είναι omega g(n),” και γράφουμε f(n) = (g(n)), εάν υπάρχει ακέραιος n 0 και μια σταθερά c > 0 τέτοια ώστε για κάθε ακέραιο n ≥ n 0, f(n) ≥ cg(n).
2-43
2-44
2-45 Κανόνες Ασυμπτωτικής Ανάλυσης — Ακολουθιακή Σύνδεση εντολών (προγραμμάτων) Ο χειρότερος δυνατός χρόνος εκτέλεσης μιας ακολουθίας εντολών με χαρακτηριστικά S 1 ; // t 1 =O(T 1 (n)) S 2 ; // t 2 =O(T 2 (n))..... S m // t m =O(T m (n)) Είναι O(max(T 1 (n), T 2 (n),..., T m (n)))
2-46 Κανόνες Ασυμπτωτικής Ανάλυσης — Εντολές Επανάληψης Ο χειρότερος δυνατός χρόνος εκτέλεσης ενός βρόγχου με χαρακτηριστικά for (S 1 ; S 2 ; S 3 ) // O(T 1 (n)),O(T 2 (n)),O(T 3 (n)) S 4 ; // O(T 4 (n)) είναι O(max T 1 (n), T 2 (n) x (I(n) +1), T 3 (n) x I(n), T 4 (n) x I(n)), όπου I(n) είναι ο αριθμός των επαναλήψεων στο βρόγχο που εκτελούνται στη χειρότερη περίπτωση
2-47 Κανόνες Ασυμπτωτικής Ανάλυσης — Εντολή Επιλογής Ο χειρότερος δυνατός χρόνος εκτέλεσης μιας εντολής επιλογής if-then-else με χαρακτηριστικά if (S1) // O(T 1 (n)) S2; // O(T 2 (n)) else S3; // O(T 3 (n)) είναι O(max T 1 (n), T 2 (n), T 3 (n))
2-48 Πόσες φορές εκτελείται ο εσωτερικός βρόγχος? Παράδειγμα
2-49 Στη πράξη είναι: Σ j=0 j+1 = Σ j=1 j = n(n+1)/2 nn
2-50 O() Λάθη Ανάλυσης: Υπερεκτίμηση - Overestimation
2-51 Μια Πιο Προσεκτική Ανάλυση Ας θυμηθούμε ότι υπάρχουν n διαφορετικοί αριθμοί στο αρχικό διάνυσμα που έχει μεγέθος m. Στη γραμμή12, κατά τη j th επανάληψη του εξωτερικού βρόγχου, ο εσωτερικός βρόγχος κάνει bucket[j] επαναλήψεις και bucket[j]+1 ελέγχους. Συνεπώς ο συνολικός αριθμός ελέγχων είναι: Σ (bucket[j] +1) = Σ bucket[j] + Σ 1 = n+m j=0 m-1 j=0 m-1
2-52
2-53
2-54 Έλεγχος των Αποτελεσμάτων της Ασυμπτωτικής Ανάλυσης Πως επαληθεύουμε ότι ο αλγόριθμός μας εκτελείται σύμφωνα με τα χαρακτηριστικά της ανάλυση της ασυμπτωτικής μας ανάλυσης? Τρέχουμε πειράματα : –Γράφουμε ένα πρόγραμμα που υλοποιεί τον αλγόριθμο –Μετράμε το χρόνο εκτέλεσης του προγράμματος για διαφορετικές τιμές της παραμέτρου(ων) n –Πρόβλημα: Θα πρέπει να υπολογίσουμε τον αντίκτυπο που έχει στο χρόνο εκτέλεσης του προγράμματος η διαδικασία garbage collection Θα πρέπει επίσης να υπολογίσουμε τον αντίκτυπο που έχει στο χρόνο εκτέλεσης του προγράμματος η εκτέλεση άλλων διαδικασιών (προγραμμάτων) από άλλους χρήστες στον ίδιο υπολογιστή που τρέχει το πρόγραμμά μας
2-55 Έλεγχος Αναλογίας Ας θυμηθούμε το κανόνα του ορίου Για παράδειγμα, ας υποθέσουμε ότι έχουμε υπολογίσει με τη ανάλυση μας ότι T(n) = O(f(n)) και έχουμε πειραματικές τιμές για τη T(n) Εάν υπολογίσουμε το λόγο T(n)/f(n) για κάθε τιμή του n με την οποία έχουμε πειραματιστεί και παρατηρήσουμε τι συμβαίνει όσο η τιμή του n αυξάνεται: Εάν ο λόγος T(n)/f(n) –Αποκλίνει, τότε η f(n) είναι πολύ μικρή –Συγκλίνει στο 0, τότε η f(n) είναι πού μεγάλη –Συγκλίνει σε μια μη μηδενική τιμή τότε η εκτίμηση ότι T(n) = O( f(n)) είναι σωστή
2-56 Τι συμβαίνει όταν η ανάλυση μας δίνει μεγάλο όριο? Είτε το αποτέλεσμα δεν είναι σφιχτό όριο Είτε η ανάλυση έγινε για τη χειρότερη περίπτωση αλλά η χειρότερη περίπτωση δεν προέκυψε κατά τη διάρκεια των πειραμάτων Είτε κάναμε κάποιο λάθος και η ανάλυσή μας δεν είναι σωστή