Ανάλυση Αλγορίθµων Είσοδος Αλγόριθµος Έξοδος Περιγραφή και Υλικό Ανάγνωσης Χρόνος εκτέλεσης (.) Ψευδοκώδικας (.) Μέτρηση των στοιχειωδών πράξεων (.) Ασυµπτωτική σηµειογραφία (.2) Ασυµπτωτική ανάλυση (.2) Μελέτη περιπτώσεων (.3.,.4) Ανάλυση Αλγορίθµων 2 Χρόνος Εκτέλεσης Οχρόνος εκτέλεσης ενός αλγορίθµου εξαρτάται από την είσοδο και συνήθως αυξάνεται µε το µέγεθος της εισόδου ύσκολο να καθοριστεί ένας µέσος χρόνος Επικεντρωνόµαστε στο χειρότερο χρόνο Πιο εύκολη ανάλυση Κρίσιµο για παιχνίδια, οικονοµικές και ροµποτικές εφαρµογές Ruig Time 2 8 6 4 2 best case average case worst case 2 3 4 Iput Size Πειραµατικές Μελέτες Γράψτε ένα πρόγραµµα που να υλοποιεί τον αλγόριθµο Τρέξτε το πρόγραµµα µε εισόδους διαφορετικού µεγέθους και περιεχοµένου Χρησιµοποιήστε µια µέθοδο όπως η System.curretTimeMillis() για να λάβετε µια ακριβή µέτρηση του πραγµατικού χρόνου εκτέλεσης Σχεδιάστε τα αποτελέσµατα Time (ms) 9 8 7 6 5 4 3 2 5 Iput Size Ανάλυση Αλγορίθµων 3 Ανάλυση Αλγορίθµων 4
Περιορισµοί των Πειραµάτων Πρέπει να υλοποιηθεί ο αλγόριθµος, πράγµα που µπορεί να είναι δύσκολο Τα αποτελέσµατα µπορεί να µην είναι ενδεικτικά του χρόνου εκτέλεσης µε άλλες εισόδους που δεν συµπεριλήφθηκαν στο πείραµα. Για να συγκριθούν δυο αλγόριθµοι πρέπει να χρησιµοποιηθούν τα ίδια περιβάλλοντα υλικού και λογισµικού Θεωρητική Ανάλυση Χρησιµοποιείται µια περιγραφή υψηλού επιπέδου του αλγορίθµου αντί κάποιας υλοποίησης Λαµβάνει υπ όψιν κάθε πιθανή είσοδο Μας επιτρέπει να εκτιµήσουµε την ταχύτητα ενός αλγορίθµου ανεξάρτητα από το περιβάλλον υλικού/λογισµικού Ανάλυση Αλγορίθµων 5 Ανάλυση Αλγορίθµων 6 Ψευδοκώδικας Υψηλού επιπέδου περιγραφή ενός αλγόριθµου Πιο δοµηµένο από την απλή γλώσσα Λιγότερο λεπτοµερές από ένα πρόγραµµα Η προτιµώµενη σηµειογραφία για την περιγραφή αλγορίθµων Αποκρύπτει τις λεπτοµέρειες του σχεδιασµού των προγραµµάτων Π.χ.: Να βρεθεί το µέγιστο στοιχείο ενός πίνακα Algorithm arraymax(a, ) Iput array A of itegers Output maximum elemet of A curretmax A[] for i to do if A[i] > curretmax the curretmax A[i] retur curretmax Λεπτοµέρειες Ψευδοκώδικα Έλεγχος ροής if the [else ] while do repeat util for do Εσοχές αντί για { } ήλωση µεθόδων Algorithm method (arg [, arg ]) Iput Output Κλήση µεθόδων var.method (arg [, arg ]) Τιµή επιστροφής retur expressio Εκφράσεις Καταχώρηση (όπως = στην Java) = Έλεγχος ισότητας (όπως == στην Java) 2 Εκθέτες και άλλες µαθηµατικές δοµές επιτρέπονται Ανάλυση Αλγορίθµων 7 Ανάλυση Αλγορίθµων 8 2
Στοιχειώδεις Πράξεις Βασικοί υπολογισµοί που εκτελεί ένας αλγόριθµος Αναγνωρίσιµοι στον ψευδοκώδικα Σε µεγάλο βαθµό ανεξάρτητοι από την γλώσσα προγραµµατισµού εν είναι σηµαντικός ένας ακριβής ορισµός (θα δούµε γιατί αργότερα) Παραδείγµατα: Υπολογισµός µιας έκφρασης Καταχώρηση τιµής σε µεταβλητή Idexig σε πίνακα Κλήση µεθόδου Επιστροφή από µέθοδο Ανάλυση Αλγορίθµων 9 Μέτρηση των Στοιχειωδών Πράξεων Ελέγχοντας τον ψευδοκώδικα, µπορούµε να βρούµε τον µέγιστο αριθµό των στοιχειωδών πράξεων που θα εκτελέσει ο αλγόριθµος σαν συνάρτηση του µεγέθους της εισόδου Algorithm arraymax(a, ) # operatios curretmax A[] 2 for i to do 2 + if A[i] > curretmax the 2( ) curretmax A[i] 2( ) { icremet couter i } 2( ) retur curretmax Total 7 Ανάλυση Αλγορίθµων Εκτίµηση του Χρόνου Εκτέλεσης Ο αλγόριθµος arraymax εκτελεί 7 στοιχειώδεις πράξεις στην χειρότερη περίπτωση Ορίζουµε a Ο χρόνος που απαιτείται για την γρηγορότερη στοιχειώδη πράξη b Ο χρόνος που απαιτείται για την αργότερη στοιχειώδη πράξη Έστω ότι T() είναι ο χρόνος εκτέλεσης χειρότερης περίπτωσης του arraymax. Έχουµε a (7 ) T() b(7 ) Εποµένως, ο χρόνος εκτέλεσης T() έχει όρια δυο γραµµικές συναρτήσεις Ρυθµός Αύξησης του Χρόνου Εκτέλεσης Αλλάζοντας το περιβάλλον υλικού/λογισµικού Επηρεάζεται ο T() κατά ένα σταθερό όρο, αλλά εν αλλάζει ο ρυθµός αύξησης του T() Ο γραµµικός ρυθµός αύξησης του χρόνου εκτέλεσης T() είναι µια εγγενής ιδιότητα του αλγορίθµου arraymax Ανάλυση Αλγορίθµων Ανάλυση Αλγορίθµων 2 3
Ρυθµοί Αύξησης Ρυθµοί αύξησης συναρτήσεων: Γραµµικός Τετραγωνικός 2 Κυβικός 3 T ( ) Σε µια γραφική παράσταση log-log, η κλίση της γραµµής αντιστοιχεί στον ρυθµό αύξησης της συνάρτησης E+3 E+28 E+26 E+24 E+22 E+2 E+8 E+6 E+4 E+2 E+ E+8 E+6 E+4 E+2 E+ Cubic Quadratic Liear E+ E+2 E+4 E+6 E+8 E+ Ανάλυση Αλγορίθµων 3 Σταθεροί Όροι Ορυθµός αύξησης δεν επηρεάζεται από σταθερούς όρους ή E+26 E+24 E+22 E+2 E+8 όρους χαµηλότερης E+6 τάξης E+4 E+2 Παραδείγµατα E+ 2 + 5 είναι µια E+8 γραµµική συνάρτηση E+6 5 2 + 8 είναι µια E+4 τετραγωνική συνάρτηση E+2 E+ T ( ) Quadratic Quadratic Liear Liear E+ E+2 E+4 E+6 E+8 E+ Ανάλυση Αλγορίθµων 4 Σηµειογραφία Ο() εδοµένου των συναρτήσεων f() και g(), λέµε ότιη f() είναι O(g()) αν υπάρχουν θετικοί σταθεροί αριθµοί c ad τέτοιοι ώστε f() cg() για Παράδειγµα: 2 + είναι O() 2 + c (c 2) /(c 2) Επιλέγουµε c = 3 και =,, 3 2+, Σηµειογραφία Ο() (συνέχεια) Παράδειγµα: η συνάρτηση 2 δεν είναι O() 2 c c Η παραπάνω ανισότητα δεν ικανοποιείται αφού ο c πρέπει να είναι σταθερός,,,,, ^2, Ανάλυση Αλγορίθµων 5 Ανάλυση Αλγορίθµων 6 4
Ο() και Ρυθµός Αύξησης Ησηµειογραφία Ο() θέτει ένα άνω όριο στο ρυθµό αύξησης µιας συνάρτησης Η δήλωση η f() είναι O(g()) σηµαίνει πως ο ρυθµός αύξησης της f() είναι το πολύ ίσος µε g() Μπορούµε να χρησιµοποιήσουµε την σηµειογραφία Ο() για να κατατάξουµε συναρτήσεις σύµφωνα µε τον ρυθµό αύξησης τους ρ.α. g() > ρ.α. f() ρ.α. f() > ρ.α. g() Ίδιος ρυθµ. αύξησης η f() είναι O(g()) Όχι η g() είναι O(f()) Όχι Ανάλυση Αλγορίθµων 7 Κατηγορίες Συναρτήσεων Έστω ότι µε {g()} δηλώνουµε την κατηγορία (το σύνολο) των συναρτήσεων οι οποίες είναι O(g()) Έχουµε {} { 2 } { 3 } { 4 } { 5 } όπου η σχέση περιεχοµένου είναι αυστηρή { 3 } { 2 } {} Ανάλυση Αλγορίθµων 8 Κανόνες Ο() Αν το f() είναι ένα πολυώνυµο βαθµού d, τότε f() είναι O( d ), δηλαδή,. Αφαιρούµε όρους χαµηλότερου βαθµού 2. Αφαιρούµε σταθερούς όρους Πρέπει να χρησιµοποιήσουµε την µικρότερη δυνατή κατηγορία συναρτήσεων Λέµε ότι η 2 είναι O() αντί για η 2 είναι O( 2 ) Πρέπει να χρησιµοποιήσουµε τηναπλούστερη έκφραση της κατηγορίας Λέµε ότι η 3 + 5 είναι O() αντί για η 3 + 5 είναι O(3) Ασυµπτωτική Ανάλυση Αλγορίθµου Ηασυµπτωτική ανάλυση ενός αλγορίθµου καθορίζει τον χρόνο εκτέλεσης σε σηµειογραφία Ο() Για να κάνουµε την ασυµπτωτική ανάλυση Βρίσκουµε τον αριθµό των στοιχειωδών πράξεων που εκτελούνται στην χειρότερη περίπτωση σαν συνάρτηση του µεγέθους της εισόδου Εκφράζουµε αυτή τη συνάρτηση σε σηµειογραφία Ο() Παράδειγµα: Προσδιορίσαµε ότι ο αλγόριθµος arraymax εκτελεί το πολύ 7 στοιχειώδεις πράξεις Λέµε ότι ο αλγόριθµος arraymax τρέχει σε χρόνο O() Αφού σταθεροί όροι και όροι χαµηλότερης τάξης εντέλει παραλείπονται, µπορούµε να τους παραβλέψουµε κατά τη µέτρηση των στοιχ. πράξεων Ανάλυση Αλγορίθµων 9 Ανάλυση Αλγορίθµων 2 5
Υπολογίζοντας Μέσους Όρους Προθέµατος (Prefix Averages) Θα επεξηγήσουµε περαιτέρω την ασυµπτωτική ανάλυση χρησιµοποιώντας δυο αλγορίθµους για µέσους όρους προθέµατος Ο i-οστός µέσος όρος προθέµατος ενός πίνακα X είναι ο µέσος όρος των πρώτων (i + ) στοιχείων του X A[i] = X[] + X[] + + X[i] Ο υπολογισµός του πίνακα A ο οποίος περιέχει τους µέσους όρους προθέµατος ενός άλλου πίνακα X έχει εφαρµογές στην οικονοµική ανάλυση 35 3 25 2 5 5 X A 2 3 4 5 6 7 Ανάλυση Αλγορίθµων 2 Μέσοι Όροι Προθέµατος (Τετραγωνικός χρόνος) Ο ακόλουθος αλγόριθµος υπολογίζει τους µέσους όρους προθέµατος σε τετραγωνικό χρόνο εφαρµόζοντας τον ορισµό Algorithm prefixaverages(x, ) Iput array X of itegers Output array A of prefix averages of X #operatios A ew array of itegers for i to do s X[] for j to i do + 2 + + ( ) s s + X[j] + 2 + + ( ) A[i] s / (i + ) retur A Ανάλυση Αλγορίθµων 22 Αριθµητική Πρόοδος Οχρόνος εκτέλεσης του prefixaverages είναι O( + 2 + + ) Το άθροισµα των πρώτων ακεραίων είναι ( + ) / 2 Παρατίθεται µια απλή οπτική απόδειξη αυτού Εποµένως, ο αλγόριθµος prefixaverages τρέχει σε χρόνο O( 2 ) 7 6 5 4 3 2 2 3 4 5 6 Ανάλυση Αλγορίθµων 23 Μέσοι Όροι Προθέµατος (Γραµµικός χρόνος) Ο ακόλουθος αλγόριθµος υπολογίζει µέσους όρους προθέµατος σε γραµµικό χρόνο κρατώντας ένα τρέχον άθροισµα Algorithm prefixaverages2(x, ) Iput array X of itegers Output array A of prefix averages of X #operatios A ew array of itegers s for i to do s s + X[i] A[i] s / (i + ) retur A Ο αλγόριθµος prefixaverages2 τρέχει σε χρόνο O() Ανάλυση Αλγορίθµων 24 6