ΑΣΥΜΠΤΩΤΙΚΗ ΑΝΑΛΥΣΗ & ΠΡΟΣΘΕΣΗ ΑΣΥΜΠΤΩΤΙΚΗ ΑΝΑΛΥΣΗ & ΠΡΟΣΘΕΣΗ
Θέματα μελέτης Ορθότητα και απόδοση αλγορίθμων Παρουσίαση και ανάλυση αλγορίθμου για πρόσθεση
Al Khwarizmi… Αλγόριθμοι Το δεκαδικό σύστημα εφευρέθηκε στην Ινδία περίπου το 600 π.Χ. και ήταν επανάσταση για τον ποσοτικό λογισμό: χρησιμοποιώντας μόνο 10 σύμβολα, ακόμα και πολύ μεγάλοι αριθμοί μπορούν να γραφτούν με συνοπτικό τρόπο και μπορούν να γίνουν αριθμητικές πράξεις με αυτούς ακολουθώντας στοιχειώδη βήματα Οι ιδέες αυτές άργησαν να εξαπλωθούν λόγω κλασικών εμποδίων όπως η γλώσσα, η απόσταση, η άγνοια…
Al Khwarizmi… Αλγόριθμοι Το πιο αποδοτικό μέσο μετάδοσής τους αποδείχθηκε ένα βιβλίο γραμμένο στα αραβικά τον 9o αιώνα από κάποιον που ζούσε στη Βαγδάτη, ονόματι Al Khwarizmi, ο οποίος παρουσίασε τις βασικές μεθόδους για άθροιση, πολλαπλασιασμό και διαίρεση αριθμών ακόμα και για τον υπολογισμό τετραγωνικών ριζών και ψηφίων του π Οι μέθοδοι ήταν ακριβείς, μηχανικές, αποδοτικές, ορθές με λίγα λόγια ήταν αλγόριθμοι – ένας όρος που χρησιμοποιήθηκε για να τιμηθεί αυτός ο σημαντικός άνθρωπος αφότου το δεκαδικό σύστημα υιοθετήθηκε τελικά στην Ευρώπη πολλούς αιώνες αργότερα…
Τι είναι το π; Ένας πραγματικός αριθμός που μπορεί να οριστεί ως ο λόγος του μήκους της περιφέρειας ενός κύκλου προς τη διάμετρό του στην Ευκλείδεια γεωμετρία Ο συμβολισμός προέρχεται από το αρχικό γράμμα πι της λέξης «περιφέρεια» και έχει καθιερωθεί διεθνώς Είναι γνωστό επίσης ως σταθερά του Αρχιμήδη ή αριθμός του Λούντολφ = 3,14159…
Ορθότητα και απόδοση αλγορίθμων Υπάρχουν 3 βασικές ερωτήσεις για κάθε αλγόριθμο: Είναι σωστός; Πόσο χρόνο (σα συνάρτηση του πλήθους των δεδομένων εισόδου) χρειάζεται για να εκτελεστεί; Εναλλακτικά, πόσο αποδοτικός είναι; Μπορεί να βελτιωθεί;
Ασυμπτωτική ανάλυση Όταν αναλύουμε έναν αλγόριθμο (π.χ., υπολογίζουμε πόσο χρόνο χρειάζεται για να εκτελεστεί για κάθε πιθανή ερώτηση) δεν πρέπει να είμαστε ούτε πολύ πρόχειροι ούτε πολύ ακριβείς… Πρέπει να κάνουμε τις αναγκαίες απλοποιήσεις… Το να μετράμε το χρόνο εκτέλεσης ενός αλγορίθμου που εκτελείται σε υπολογιστή με βήματα είναι ήδη απλοποίηση… Ασυμπτωτική ανάλυση = ανάλυση στο περίπου
Απλοποιήσεις Μετράμε το χρόνο εκτέλεσης ενός αλγόριθμου με βασικά βήματα υπολογιστή και τον εκφράζουμε ως συνάρτηση του μεγέθους της εισόδου Αντί να λέμε ότι ένας αλγόριθμος τρέχει σε π.χ., 5n3+4n+3 βήματα για μέγεθος εισόδου n, είναι απλούστερο να παραλείψουμε τους όρους χαμηλής τάξης όπως οι 4n και 3 (οι οποίοι γίνονται ασήμαντοι καθώς μεγαλώνει το n) ακόμα και τη συνιστώσα 5 στο επικρατή όρο και να πούμε ότι ο αλγόριθμος τρέχει σε O(n3) βήματα
Συμβολισμός Ο Φανταστείτε ότι f(n) και g(n) είναι οι χρόνοι εκτέλεσης δύο αλγορίθμων για μέγεθος εισόδου n Οι f(n) και g(n) είναι συναρτήσεις από τους θετικούς ακέραιους στους θετικούς πραγματικούς f = O(g) (που σημαίνει ότι η f δεν μεγαλώνει γρηγορότερα από τη g) αν υπάρχει σταθερά c > 0 τέτοια ώστε f(n) c g(n) f = O(g) μοιάζει με το f g με τη διαφορά της σταθεράς c 10n = O(n) μπορούμε να παραβλέψουμε τι συμβαίνει για μικρές τιμές του n
Συμβολισμός Ο g f f = O(g)
Συμβολισμοί Ω και Θ Ακριβές φράγμα (Exact Bound) Άνω φράγμα (Upper Bound) Κάτω φράγμα (Lower Bound)
Απλοί κανόνες για ασυμπτωτική ανάλυση Αντί να έχουμε μια πολύπλοκη συνάρτηση της μορφής 3n2 + 4n + 5, μπορούμε να την αντικαταστήσουμε με O(f(n)), με την f(n) να είναι όσο απλούστερη γίνεται… Εδώ θα μπορούσαμε να χρησιμοποιήσουμε O(n2) αφού ο όρος με το τετράγωνο κυριαρχεί όλων των άλλων όρων του αθροίσματος Μερικοί απλοί κανόνες για την απλοποίηση συναρτήσεων μέσω της παράλειψης όρων είναι οι: Πολλαπλασιαστικές σταθερές μπορούν να παραλειφθούν 14n2 γίνεται n2 na επικρατεί του nb αν a > b n2 κυριαρχεί του n Κάθε εκθετικός όρος κυριαρχεί κάθε πολυωνυμικού 3n κυριαρχεί του n5 (κυριαρχεί επίσης του 2n). Κάθε πολυωνυμικός όρος κυριαρχεί κάθε λογαρίθμου n κυριαρχεί του (log n)3. Αυτό σημαίνει επίσης ότι ο όρος n2 κυριαρχεί του όρου n log n.
Ασυμπτωτική ανάλυση και πράξη… Δεν πρέπει να παρανοηθεί αυτή η «υποτιμητική» μεταχείριση των σταθερών Οι προγραμματιστές και όσοι αναπτύσσουν αλγόριθμους στην πράξη ενδιαφέρονται εξαιρετικά για τις σταθερές και θα κατέβαλαν τρομερή προσπάθεια για να κάνουν έναν αλγόριθμο να τρέξει γρηγορότερα ακόμα και στο μισό χρόνο… Αλλά η κατανόηση των αλγορίθμων σε βάθος θα ήταν αδύνατη χωρίς της απλοποίηση που παρέχεται μέσω της ασυμπτωτικής ανάλυσης…
ΠΡΟΣΘΕΣΗ
Πρόσθεση: αλγόριθμος Βάλε τους αριθμούς έναν σε κάθε σειρά και στοίχισέ τους από δεξιά προς τα αριστερά Κάνε ένα πέρασμα από το δεξιά προς τα αριστερά υπολογίζοντας το άθροισμα ψηφίο – ψηφίο, διατηρώντας μία επιπλέον γραμμή για το κρατούμενο Σε κάθε βήμα αθροίζονται τρεις μονοψήφιοι αριθμοί
Πρόσθεση: παράδειγμα Κρατούμενο:
Πρόσθεση: χρόνος εκτέλεσης αλγορίθμου Δίνονται δύο δυαδικοί αριθμοί x και y Πόσο χρόνο απαιτεί ο προηγούμενος αλγόριθμος για να τους αθροίσει; Θέλουμε η απάντηση να εκφραστεί σα συνάρτηση του μεγέθους της εισόδου: του αριθμού των bits του x και του y, δηλ., του αριθμού των πλήκτρων που πατάμε για να τους πληκτρολογήσουμε
Πρόσθεση: χρόνος εκτέλεσης αλγορίθμου Υποθέτουμε ότι οι αριθμοί x και y αποτελούνται από n bits ο καθένας Το άθροισμα των x και y έχει n+1 bits το πολύ Κάθε ανεξάρτητο bit του αθροίσματος υπολογίζεται σε σταθερό χρόνο Ο συνολικός χρόνος εκτέλεσης του αλγορίθμου είναι επομένως c0+c1n (c0 και c1 είναι σταθερές) δηλ., γραμμικός Δεν επικεντρωνόμαστε στις σταθερές c0 και c1, και συμβολίζουμε το χρόνο εκτέλεσης με O(n)
Πρόσθεση: μπορούμε καλύτερα; Για να προσθέσουμε δύο αριθμούς των n bit ο καθένας πρέπει τουλάχιστον να τους διαβάσουμε και να γράψουμε το αποτέλεσμα: ακόμα και αυτό απαιτεί n λειτουργίες Επομένως, ο αλγόριθμος για την πρόσθεση είναι βέλτιστος εντός πολλαπλασιαστικών σταθερών