Π. ΚΡΗΤΗΣ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΗΥ 380, «ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ» Φ 03: ΑΣΥΜΠΤΩΤΙΚΕΣ ΕΚΦΡΑΣΕΙΣ Ενδιαφερόμαστε μεν για τους αλγορίθμους αλλά εντός ενός συγκεκριμμένου πλαισίου: (α) ως λύσεις προβλημάτων, (β) ως «ταχείες» ή «δραστικές» λύσεις αυτών των προβλημάτων. Για το (β) χρειαζόμαστε πάντοτε μια ανάλυση του πλοκής των αλγορίθμων μας, και ο εφικτός και κατάλληλος τρόπος για να την εκφράσουμε είναι οι ασυμπτωτικές εκφράσεις Ο Ω Θ και ο( ). Επαναλαμβάνουμε τον ορισμό τους: f(n) = O( g(n) ) f(n) = Ω( g(n) ) f(n) = Θ( g(n) ) f(n) = ο( g(n) ) «f το πολύ ευθέως ανάλογη της g» Υπάρχει μια σταθερά C, τέτοια ώστε για κάθε n, (ή έστω για κάθε n n*): f(n) C g(n) ««f τουλάχιστον ευθέως ανάλογη της g» Υπάρχει μια σταθερά C, τέτοια ώστε για κάθε n, (ή έστω για κάθε n n*): f(n) C g(n) «f περίπου ευθέως ανάλογη της g» Υπάρχουν σταθερές C1, C2, τέτοια ώστε για κάθε n, (ή έστω για κάθε n n*): C1 g(n) f(n) C2 g(n) «f μηδενίζεται ως προς g» lim f( n) = 0 n gn ( ) ( ) Είναι απαραίτητο μόνο και μόνο για να μπορούμε να «συνεννοούμαστε», αλλά και να διαβάζετε άρθρα και βιβλία να είστε εξοικειωμένοι με το νόημα, τη γραφή και τη χρήση αυτών των συμβολισμών. Ι. Σύγκριση εκφράσεων: Ο Ο/Ω συμβολισμός πρέπει να μας είναι κατανοητός, δηλαδή όταν τον διαβάζουμε να καταλαβαίνουμε τί εννοεί. Χαρακτηριστικό σημείο εφαρμογής αυτού είναι η σύγκριση δύο αλγορίθμων. Ας υποθέσουμε ότι το κόστος χειρίστης περιπτώσεως (= Χ/Π) δύο αλγορίθμων μας προκύπτει ως εξής ποιόν από τους δύο θα διαλέγαμε και γιατί; ΧΠ 1 ου ΧΠ 2 ου Προτιμότερος; Ο(Ν 2 ) Ω(ΝlogN) Δεν έχουμε επαρκή στοιχεία ο 1 ος θα μπορούσε να είναι ακόμα και Ω(Ν) κόστους... Ο(Ν 2 ) Ω(N 3 ) Σαφώς ο 1 ος Ω(N) Ο(Ν 2 ) Ανεπαρκή στοιχεία Ω(N 2 ) Ο(Ν 1.5 ) Σαφώς ο 2 ος Ο(ΝlogN) Ο(Ν 2 ) Ανεπαρκή στοιχεία. Ο(Ν 2 ) Ο(Ν) Ανεπαρκή στοιχεία Ω(N 2 ) Ω(N 3 ) Ανεπαρκή στοιχεία Ω(ΝlogN) Ω(Ν) Ανεπαρκή στοιχεία Η ιδέα της σύγκρισης δίνεται πιο κάτω: αν βάλουμε σε μια ευθεία τις πλοκές (λ.χ. Ν και Ν 2 ) στη σειρά, με την μεγαλύτερη δεξιά, (στο σχήμα f(n) = o(g(n)), τότε οι Ο( ) ποσότητες πάνε προς τα αριστερά, και οι Ω( ) προς τα δεξιά. Για να έχουμε σαφή διαχωρισμό θα πρέπει η μικρότερη να είναι Ο(f) και η μεγαλύτερη Ω(g). Πανεπιστήμιο Κρήτης Τμ. Επιστήμης υπολογιστών «Αλγόριθμοι & πολυπλοκότητα, ΗΥ380 Γεώργιος Φ.Δ. Γεωργακόπουλος, 28/3/2014, 1/5
Ο( f(n)) f(n) g(n) Ω(g(n)) Αν δεν έχουμε σαφή διαχωρισμό, τότε δεν μπορούμε να βγάλουμε συμπέρασμα π.χ. στο παρακάτω σχήμα μια Ω(Ν) πλοκή ΧΠ θα μπορούσε να είναι μεγαλύτερη από μια Ω(Ν 1.2 ), ή μια Ω(Ν) πλοκή ΧΠ μεγαλύτερη από μια Ο(Ν 1.5 ) (βλ. κόκκινα σημεία). N N 1.2 Ω(N 1.2 ) Ω(N) Ο(...) N N 1.5 Ω(...) ΙΙ. Απλοποίηση εκφράσεων: Με τον Ο Ω συμβολισμό μπορούμε να απλοποιούμε την παράσταση διαφόρων εκφράσεων. Σε αυτή την απλοποίηση υπάρχει μια «απώλεια» πληροφορίας, όχι όμως τόση που να ενοχλεί τα ενδιαφέροντα που έχουμε εδώ. Τρία είναι τα σημαντικά: Τα κατά Θ( ) ιεραρχικώς μικρότερα μεγέθη είναι περιττά (είτε ως πρόσθετέοι, είτε ως αφαιρετέοι), και απαλείφονται. Οι σταθερές απαλείφονται. Τα γινόμενα της μεταβλητής (ή συναρτήσεων της μεταβλητής παραμένουν. 10n 2 + 20n + 500 Η ποσότητα αυτή γράφεται Θ(n 2 ): όλοι οι άλλοι όροι μηδενίζονται ως προς τον κύριο όρο τετράγωνο. Η τελική γραφή Θ(n 2 ) περιέχει όλη την πληροφορία που μας ενδιαφέρει, δηλαδή την «τετραγωνική συμπεριφορά» της αρχικής έκφρασης. log(n 2 /10+n) Η ποσότητα n 2 /10+n απλοποιείται σε κάτι περίπου ανάλογο με n 2. Και επειδή ο log( ) είναι μονότονα αύξουσα συνάρτηση, μια ποσότητα ανάμεσα σε κx 2 και λx 2 έχει λογάριθμο ανάμεσα σε 2logn+logκ και 2logn+logλ, δηλαδή τελικά: Θ(logn). 3 2 n /100 + 10n Η υπόρριζη ποσότητα απλοποιείται σε Θ(n 3 ), και (όπως και πριν) μας απομένει το 3 Θ( n ) =Θ(n 1.5 ). n 2 /logn + n 1.2 Αν κάποια από τις δυο εκφράσεις μηδενίζεται ως προς την άλλη δεν χρειάζεται να την κρατήσουμε. Ελέγχουμε το πηλίκο n 1.2 / (n 2 /logn) = logn/n 0.8 και βλέπουμε (με απλό απειροστικό λογισμό) ότι τείνει στο 0, διότι ο λογάριθμός του loglogn 0.8logn = logm 0.8m, τείνει στο μείον άπειρο για m. Άρα, n 2 /logn + n 1.2 = Θ(n 2 /logn). ΙΙΙ. Το «σημείο διασταύρωσης». Πίσω από τον συμβολισμό Ο Ω Θ κρύβεται και παραλείπεται μια σταθερά. Ας δούμε τί ρόλο μπορεί αυτή να παίξει. Ανάμεσα σε μια πλοκή «100Ν» και «Ν 2 /100» η δεύτερη μας «ξεγελά» με την μικρή σταθερά που έχει (1/100 ως προς 100). Αλλά αυτό είναι οπτική απάτη, διότι το Ν 2 μεγαλώνει αρκετά Πανεπιστήμιο Κρήτης Τμ. Επιστήμης υπολογιστών «Αλγόριθμοι & πολυπλοκότητα, ΗΥ380 Γεώργιος Φ.Δ. Γεωργακόπουλος, 28/3/2014, 2/5
γρήγορα και από ένα σημείο «διασταύρωσης» με την 100Ν, αυτή η 2 η πλοκή θα είναι διαρκώς προτιμότερη. Αυτό το σημείο διασταύρωσης μας δίνει η εξίσωση 100Ν = Ν 2 /100 ή Ν = 10,000: Δηλαδή για 10,000 δεδομένα και πάνω, η 1 η πλοκή είναι η προτιμότερη παρά την «μεγάλη» σταθερά που έχει. Ποιό είναι το σημείο διασταύρωσης για τα εξής ζεύγη χρονικών πλοκών: 5Ν 3 20 Ν 2.8 Η εξίσωση μας δίνει 5Ν 3 =20 Ν 2.8, ή Ν 0.2 = Ν 1/5 = 4 ή Ν = 4 5 = 1024. Για Ν > 1024 συμφέρει η πλοκή που είναι ασυμπτωτικά μικρότερη. 1000 Ν Ν/logN Η εξίσωση δεν είναι εύκολο να λυθεί χρειάζεται είτε ένα προγραμματάκι, είτε λίγες πράξεις με το χέρι. Το σημείο προκύπτει κάπου κοντά στο Ν = 2 16 ~ 64000. ΙV. «Κατ ευθείαν» υπολογισμός. Το σημαντικό όμως σε αυτές τις ασυμπτωτικές εκφράσεις είναι ότι επειδή δίδουν μια στο «περίπου» και όχι ακριβή περιγραφή είναι πολύ πιο εύκολο να υπολογιστούν είναι πολύ πιο εύκολο να σκεπτόμαστε με βάσει αυτές. Δίνουμε μερικά παραδείγματα: Έχουμε δύο τεμνόμενες ευθείες. Πόσες γωνίες σχηματίζουν ακριβώς; Αν δεν το πιάσετε από την αρχή σωστά ίσως να μπερδευτείτε ακόμα και σε μια τόσο απλή περίπτωση: 4; 8; 12; 16; (Είναι οι 4 προφανείς γωνίες; Όχι διότι είναι και αντιστοίχως άλλες 4 μή κυρτές. Άρα 8. Όχι διότι οι δύο ευθείες δίδουν και άλλες δύο γωνίες των 180 ο, ή μάλλον άλλες 4 αφού έχουμε δύο επίπεδες γωνίες σε κάθε ευθεία μία από κάθε πλευρά. Άρα 12; Όχι διότι οι τέσσερεις ημιευθείες αποτελούν άλλες 4 γωνίες μηδενικές γωνίες. Άρα 16. Όχι διότι με κορυφή το σημείο τομής των ευθειών έχουμε και μια πλήρη γωνία των 360 ο, άρα 17. Όχι. Διότι οι τέσσερεις μηδενικές γωνίες δίνουν 4 αντίστοιχες. πλήρεις γωνίες, άρα 20 τελικά. Ή όχι; Μήπως τελικά σχηματίζεται... άπειρο πλήθος γωνιών; Όχι βέβαια: κάθε μία από τις τέσσερεις ημιευθείες σχηματίζει με κάθε άλλη ημιευθεία (ακόμα και με τον εαυτό της) ακριβώς δύο γωνίες: μία «κυρτή» και μια «μή κυρτή». Άρα έχουμε 2 (4 4) = 32. Βρήκαμε 20 πού είναι οι άλλες 12 γωνίες; Oops μετρήσαμε τα ζευγάρια δύο φορές, δηλαδή το {α, β} και ως (α, β) και ως (β, α). Πρέπει λοιπόν να λάβουμε υπόψι μας τα μισά, άρα οιγωνίες είναι 2 (½ 4 4) = 16. Αλλά μετρήσαμε ήδη 20 γωνίες! Πού βρέθηκαν οι 4 παραπάνω; Τέλος πάντων βγάλτε άκρη μόνοι σας αν επιμένετε. Η σωστή απάντηση για μας είναι η απάντηση στη σωστή (για μας) ερώτηση: πόσες γωνίες σχηματίζονται «Ο/Ω περίπου»; Και αυτή η απάντηση είναι: «δηλαδή το πλήθος τους είναι C και C, όπου C, C θετικές σταθερές».. Πανεπιστήμιο Κρήτης Τμ. Επιστήμης υπολογιστών «Αλγόριθμοι & πολυπλοκότητα, ΗΥ380 Γεώργιος Φ.Δ. Γεωργακόπουλος, 28/3/2014, 3/5
(όπου εδώ C = 4, και C = 32 το τελευταίο τόσο ώστε να είμαστε σίγουροι... ). Έχουμε Ν σημεία στο επίπεδο. Πόσα τρίγωνα σχηματίζουν ακριβώς; Ας είναι όσα είναι... Πόσα τρίγωνα σχηματίζουν «περίπου»; Η 1 η κορυφή θα είναι μία από Ν, η 2 η μία από τις υπόλοιπες Ν 1, και η 3 η μία από τις υπόλοιπες Ν 2. Το γινόμενο είναι Ν(Ν 1)(Ν 2), όπου βέβαια κάθε τρίγωνο το μετρήσει πολλές φορές, όμως μόνον φορές. Και αυτή η σταθερά δεν «παίζει» στην ασυμπτωτική εκφραση, που εδώ περιέχει τρείς φορές τον παράγοντα Ν απάντηση: Θ(Ν 3 ). Έχουμε ένα κανονικό ορθογωνικό πλέγμα Ν Ν σημείων. Πόσα τετράγωνα σχηματίζονται από κορυφές αυτού του πλέγματος, ακριβώς; Είναι βέβαιο ότι κανείς αν δεν έχει σοβαρό λόγο δεν θα κάτσει να τα μετρήσει ακριβώς. Πόσα τετράγωνα σχηματίζονται στο «περίπου»; Κάθε τετράγωνο χαρακτηρίζεται από τα δύο διαγώνια σημεία του, (έστω το κάτω αριστερά και το πάνω δεξιά). Και κάθε τέτοιο ζευγάρι πάνω σε μια διαγώνιο με k σημεία, ορίζει (πάντοτε...) ένα (και μόνον ένα) τετράγωνο, άρα σε μια διαγώνιο με k σημεία έχουμε k 2 τετράγωνα, και έχουμε Ο(Ν) διαγωνίους, μήκους Ο(Ν), αλλά και Ω(Ν) διαγωνίους μήκους Ω(Ν). Απάντηση: Θ(Ν) Θ(Ν 2 ) = Θ(Ν 3 ) = Θ(Ν 3 Ν 2 ), (που μένει δηλαδή η ίδια ακόμα και βγάλουμε τα = Ν 2 εκφυλισμένα τετράγωνα). V. «Πλοκή»: υπολογισμός βημάτων χειρίστης περιπτώσεως. Το σημαντικό για μας είναι να μπορούμε να εκτιμούμε το πόσες πράξεις θα κάνει στη χειρότερη περίπτωση ένα τεμάχιο κώδικα, που περιγράφει τον (λ.χ. υπό σχεδίαση) αλγόριθμό μας. Αυτό που χρειαζόμαστε είναι, κυρίως, μια καλή ασυμπτωτική εκτίμηση του κόστους των επαναληπτικών εντολών, αφού αυτές παράγουν το μεταβλητό κόστος ενός προγράμματος. Εξετάζουμε τις εντολές μία μία, και απλά κάνουμε τον λογαριασμό. Αυτός ο λογαριασμός μερικές φορές μπορεί να γίνει ακόμα και εάν δεν καταλαβαίνουμε τί «ακριβώς» κάνει ο αλγόριθμος, και ποιό «πρόβλημα» λύνει: βρόχος, Ν βρόχος, Ν Επεξεργασία(Α[1..Ν]: πίνακας Ν αριθμών) { Τελευταίο Ν Τέλος ΨΕΥΔΕΣ Εφόσον (όχι Τέλος) { Τέλος ΑΛΗΘΕΣ Για κ = 1 έως Τελευταίο-1 { Εάν Α[κ]>Α[κ+1] τότε { Α[κ] Α[κ+1} // εναλλαγή Τέλος ΨΕΥΔΕΣ } } Τελευταίο Τελευταίο-1 } } Η μεταβλητή Τελευταίο από τιμής Ν μόνον μειούται, επομένως μένει Ν και ο βρόχος του «κ» θα επαναλαφθεί το πολύ Ν φορές. Ακόμα και εάν σε κάθε εκτέλεση του βρόχου Eφόσον η μεταβλητή Τέλος τρέπεται σε ΨΕΥΔΕΣ βήμα, η μεταβλητή Τελευταίο θα φθάσει μειουμένη σε Ν 1 βήματα στη τιμή +1, ο βρόχος του «κ» δεν θα εκτελεστεί, η μεταβλητή Τέλος θα παραμείνει ΑΛΗΘΗΣ (αν αυτό δεν έχει συμβεί νωρίτερα) και ο βρόχος Eφόσον θα τερματιστεί έχοντας εκτελεστεί το πολύ Ν φορές. Σε άλλες όμως περιπτώσεις το να γνωρίζουμε τί κάνει ο αλγόριθμος όχι μόνον βοηθάει, αλλά είναι και κατά κάποια έννοια απαραίτητο: δείτε στις σημειώσεις το παράδειγμα του «κυρτού περιβλήματος»: πώς θα εξασφαλίζαμε τα σχετικά φράγματα στις συναρτήσεις «ΑΝΩ ΓΕΦΥΡΑ»/«ΚΑΤΩ ΓΕΦΥΡΑ» εάν δεν γνωρίζαμε τι κάνει (από γεωμετρικής πλευράς) ο αλγόριθμος; Πανεπιστήμιο Κρήτης Τμ. Επιστήμης υπολογιστών «Αλγόριθμοι & πολυπλοκότητα, ΗΥ380 Γεώργιος Φ.Δ. Γεωργακόπουλος, 28/3/2014, 4/5
Προς ΕΞΑΣΚΗΣΗ Βασιζόμενοι στις προηγούμενες εξηγήσεις θα πρέπει να είστε σε θέση να λύσετε όλα τα προβλήματα. Ζητούνται 5 «ασκήσεις», 1 από κάθε ομάδα, (με ομάδες τις εξής: [1, 2, 3, 4], [5, 6], [7, 8], [9, 10], [11, 12] ). 1. Δίδονται Ν ευθείες στο επίπεδο. Πόσα το πολύ και πόσα τουλάχιστον σημεία τομής σχηματίζονται; 2. Δίδονται Ν ευθείες στο επίπεδο. Πόσες το πολύ και πόσες τουλάχιστον περιοχές σχηματίζονται; 3. Δίδονται Ν φυσικοί αριθμοί. Πόσα το πολύ διαφορετικά αθροίσματα μπορούμε να σχηματίσουμε αθροίζοντας τριάδες από αυτούς; 4. Σε ένα γράφημα όπου Ν κόμβοι συνδέονται με Μ ακμές, πόσοι τουλάχιστον κύκλοι δημιουργούνται ως συνάρτηση του Μ; 5. Δώστε Ο/Ω ασυμπτωτικές εκτιμήσεις για το άθροισμα 6. Δώστε Ο/Ω ασυμπτωτικές εκτιμήσεις για το άθροισμα N k (καθώς και όποιες εξηγήσεις). k= 1 N 3 k (καθώς και όποιες εξηγήσεις). k= 1 7. Ποιά είναι η πλοκή ως προς n (κατά Ο/Ω/Θ έκφραση) του παρακάτω κώδικα; Επεξεργασία(n: φυσικός αριθμός) { s 0 Για i = 1 έως n-1 Για j = i+1 έως n Για k = i έως j { s s + k } } 8. Ποιά είναι η πλοκή του παρακάτω κώδικα ως προς Ν; ΤρέχαΒρες(n: φυσικός αριθμός) { s 0 κ n Εφόσον (κ>1) { Για λ = 1 έως κ { s s + λ κ κ δια 2 } } } 9. Από ποιό σημείο «Ν» και μετά η πλοκή 40Ν είναι συνεχώς προτιμότερη από την Ν 2 /10; 10. Από ποιό σημείο «Ν» και μετά η πλοκή 100Ν 2.5 είναι συνεχώς προτιμότερη από την 4Ν 3 ; 11. Ποιά πλοκή είναι τελικά προτιμότερη: μια Θ( N ) ή μια Θ(10logN); 12. Ποιά πλοκή είναι τελικά προτιμότερη: μια Θ(2 Ν/2 ) ή μια Θ( N N ); Πανεπιστήμιο Κρήτης Τμ. Επιστήμης υπολογιστών «Αλγόριθμοι & πολυπλοκότητα, ΗΥ380 Γεώργιος Φ.Δ. Γεωργακόπουλος, 28/3/2014, 5/5