Άσκηση 1 Ασκήσεις () Εισαγωγή στην Ανάλυση Αλγορίθμων Υποθέστε ότι συγκρίνουμε την υλοποίηση της ταξινόμησης με εισαγωγή και της ταξινόμησης με συγχώνευση στον ίδιο υπολογιστή. Για εισόδους μεγέθους n, η ταξινόμηση με εισαγωγή απαιτεί 8n βήματα ενώ η ταξινόμηση με συγχώνευση 64n lg n. Για ποιες τιμές του n ταξινόμηση με εισαγωγή υπερτερεί της ταξινόμησης με συγχώνευση; Η ταξινόμηση με εισαγωγή υπερτερεί της ταξινόμησης με συγχώνευση όταν: 8n < 64n lg n n < 8lg n. Έπειτα από υπολογισμούς που έγιναν με τη χρήση του MATLAB προκύπτει ότι η ανισότητα αυτή ισχύει για n 43. Αναλυτικότερα: Αναζητούμε τις τιμές του φυσικού αριθμού n για τις οποίες ισχύει η ανίσωση n < 8lg n Αρχικά κάνουμε τη γραφική παράσταση των συναρτήσεων f(n) = n και g(n) = 8lg n: >> n=:1:100; >> plot(n); >> plot(8*log(n)); >> n=:1:100; >> plot(n); >> hold all >> plot(8*log(n)); Από τη γραφική παράσταση βλέπουμε ότι το διάστημα για το οποίο πρέπει να ισχύει η ανίσωση είναι το [ x], όπου x είναι μεταξύ του 4 και 44. Μπορούμε να βρούμε με καλύτερη ακρίβεια τον αριθμό x στο MATLAB, ως εξής: >> n=100; >> A=zeros(1,n); >> for i=1:n k=i-8*log(i); A(1,i)=k; end >> find(a<0) ans = Columns 1 through 6 3 4 5 6 7
Columns 7 through 1 8 9 10 11 1 13 Columns 13 through 18 14 15 16 17 18 19 Columns 19 through 4 0 1 3 4 5 Columns 5 through 30 6 7 8 9 30 31 Columns 31 through 36 3 33 34 35 36 37 Columns 37 through 4 38 39 40 41 4 43 Η απάντηση λοιπόν με τη βοήθεια του MATLAB είναι: από έως 43. Άσκηση i) Αν f n 3n n 4και g n nlog n 5, = + = + δείξτε ότι f ( n) + g( n) O( n ) 1 ος τρόπος: (με χρήση του κανόνα του αθροίσματος) Είναι f(n) = O(n ) g(n) = O(n log n), f(n) + g(n) = O(max{n, n log n}) = O(n ). αφού n, log n n n log n n. ος τρόπος: (με όρια) Είναι lim n + + f n g n f x g x = lim n x + x 3x x+ 4 + xlog x+ 5 = lim x + x 6x 1+ log x+ 1 ln = lim (L'Hôpital) x + x 6 + 1 ( xln ) = lim (L'Hôpital) x + = 0. Άρα, f ( n) + g( n) O( n ) =. ii) Αν = = δείξτε ότι f ( n) + g( n) O( n) f n n και g n log n, =. =. Είναι f n + g n x + log x lim = lim n n x + x log x = lim 1+ x + x 1 ( xln ) = lim x + 1 ( x ) 1 = lim ln n x = 0 (L'Hopital)
iii) Δείξτε ότι (n + a) k = Θ(n k ), όπου a και k είναι πραγματικές σταθερές με k > 0. Είναι k k k k j j k k k k 1... k k k k 1 k k n + a = n a n n a a n kan... a O j = 0 + 1 + + k = + + + = ( n ) j= 0 όπου χρησιμοποιήσαμε το ανάπτυγμα του Newton και το γεγονός ότι, αν έχουμε το πολυώνυμο P( n) = 0 k i k = an i i με a k > 0, τότε P( n) = O( n ). iv) Εξηγήστε αν είναι σωστοί οι εξής ισχυρισμοί: α) n+1 = O( n ) β) n = O( n ) α) Είναι n+1 = O( n ). Πράγματι με c = και n 0 = 0, έχουμε n n 0, f (n) = n+1 = n c n = cg(n) β) Είναι n O( n ). Πράγματι, έστω ότι n = O( n ). Τότε θα υπάρχουν c > 0 και n 0 τέτοιοι, ώστε n n 0, n c n n c n lg c άτοπο, αφού n (δεν υπάρχει πραγματικός αριθμός που να είναι μεγαλύτερος από κάθε φυσικό αριθμό). Άσκηση 3 Για κάθε ζεύγος συναρτήσεων f ( n) και f(n) 10n n 3 n log n log n g(n) n 10n n log n n + log n k n ln n log n log (n + 1) log n log log n log n n 10 n n m m n g n πίνακα εξηγήστε αν f ( n) = O( g( n) ), και αν g( n) O( f ( n) ) =. Υπενθυμίζουμε την Παρατήρηση από τις Σημειώσεις (Ασυμπτωτική Συμπεριφορά και Συμβολισμοί) Παρατήρηση : Ένα ισχυρό και χρήσιμο εργαλείο για να αποδείξει κανείς ότι κάποιες συναρτήσεις είναι της τάξης κάποιων άλλων, όπως επίσης και για να αποδείξει το αντίθετο, είναι ο κανόνας του ορίου, ο οποίος μας λέει ότι δοθέντων δύο συναρτήσεων f και g: R +, έχουμε
1. αν. αν 3. αν lim n f n g n +, τότε f(n) = O(g(n)) και g(n) = O(f(n)), f n lim = 0, τότε f(n) = O(g(n)) αλλά g(n) O(f(n)) και n g n lim n f n g n = +, τότε f(n) O(g(n)) αλλά g(n) = O(f(n)). Με βάση λοιπόν αυτή την Παρατήρηση εύκολα καταλήγουμε στον ακόλουθο πίνακα Άσκηση 4 f(n) g(n) f(n) = Ο(g(n)) g(n) = Ο(f(n)) 10n n 10n NAI OXI n 3 n log n OXI NAI n log n n + log n OXI NAI log n k n NAI OXI ln n log n NAI NAI log (n + 1) log n NAI NAI log log n log n NAI OXI n 10 n NAI OXI n m m n NAI OXI Λύστε κάθε μία από τις ακόλουθες αναδρομικές σχέσεις 1. Για να λύσουμε την θεωρούμε Ο(1) = 1 και έχουμε
Άρα, T(n) = O(a n ).. Για να λύσουμε την θεωρούμε Ο(1) = 1 και Ο(n) = n, οπότε έχουμε Άρα, T(n) = O(a n ). 3. Για να λύσουμε την θεωρούμε ότι Ο(1) = 1 και υποθέτουμε ότι n = a m, οπότε έχουμε
Άρα, T(n) = O(a m ). 4. Για να λύσουμε την θεωρούμε ότι Ο(1) = 1, Ο(n) = n και υποθέτουμε ότι n = a m, οπότε έχουμε Άρα, T(n) = O(n lg n). Άσκηση 5 Υπολογίστε αυστηρά ασυμπτωτικά Ο φράγματα για τους χρόνους εκτέλεσης των Προγραμμάτων 1.1, 1., 1.3,.5, και.6 (διαφάνειες (1) των παραδόσεων του μαθήματος). 1. Ο χρόνος εκτέλεσης δίνεται στον επόμενο πίνακα:.
Ο χρόνος εκτέλεσης δίνεται στον επόμενο πίνακα: 3. Ο χρόνος εκτέλεσης δίνεται στον επόμενο πίνακα: 4. Ο χρόνος εκτέλεσης δίνεται στον επόμενο πίνακα:
5. Ο χρόνος εκτέλεσης δίνεται στον επόμενο πίνακα: Άσκηση 6 Αλγόριθμος: Υπολογισμός κατά όρους της τιμής ενός πολυωνύμου // Ο αλγόριθμος αυτός υπολογίζει την τιμή ενός πολυωνύμου a[n]x n + a[n 1]x n 1 //+ + a[]x + a[1]x + a[0] με υπολογισμό κάθε όρου του πολυωνύμου ξεχωριστά, //αρχίζοντας από τον a[0], και προσθέτοντάς τον σε ένα συνολικό άθροισμα.] //Είσοδος: n [ένας μη αρνητικός ακέραιος], // a[0], a[1], a[],..., a[n] [μια συστοιχία πραγματικών αριθμών], // x [ένας πραγματικός αριθμός] //Έξοδος: η τιμή polyval του πολυωνύμου.
i) Έστω S(n) το πλήθος των προσθέσεων και πολλαπλασιασμών που πρέπει να πραγματοποιηθούν κατά την εκτέλεση του Αλγορίθμου για ένα πολυώνυμο βαθμού n. Εκφράστε το S(n) συναρτήσει του n. ii) Εκφράστε την πολυπλοκότητα S(n) του Αλγορίθμου στον συμβολισμό Ο. i) Πλήθος πολλαπλασιασμών = πλήθος επαναλήψεων του εσωτερικού βρόχου = 1 + + 3 + + n ( 1) n n+ = Πλήθος προσθέσεων = πλήθος επαναλήψεων εξωτερικού βρόχου = n Άρα, το συνολικό πλήθος των πολλαπλασιασμών και προσθέσεων είναι ii) Άσκηση 7 n n+ 1 1 3 + n= n + n. S(n) = Είναι, S(n) = O(n ). Αλγόριθμος Horner // Ο αλγόριθμος αυτός υπολογίζει την τιμή ενός πολυωνύμου a[n]x n + a[n 1]x n 1 + + a[]x //+ a[1]x + a[0] με διαδοχικές προσθέσεις και πολλαπλασιασμούς, όπως φαίνεται στην παρά- //σταση (( ((a[n]x + a[n 1])x + a[n ])x + + a[])x + a[1])x + a[0]. //Σε κάθε βήμα, με αρχή το a[n], η τρέχουσα τιμή της μεταβλητής polyval πολλαπλασιάζεται //με x και ο επόμενος μικρότερος συντελεστής προστίθεται στη μεταβλητή.] //Είσοδος: n [ένας μη αρνητικός ακέραιος] //a[0], a[1], a[],., a[n] [μια συστοιχία πραγματικών αριθμών], //x [ένας πραγματικός αριθμός] //Έξοδος: η τιμή polyval του πολυωνύμου. i) Έστω M(n) το πλήθος των προσθέσεων και πολλαπλασιασμών που πρέπει να γίνουν κατά την εκτέλεση του Αλγορίθμου για ένα πολυώνυμο βαθμού n. Εκφράστε το M(n) συναρτήσει του n. ii) Εκφράστε την πολυπλοκότητα M(n) του Αλγορίθμου στον συμβολισμό Ο. iii) Πώς συγκρίνεται η πολυπλοκότητα αυτή με την πολυπλοκότητα του Αλγορίθμου της Άσκησης 6; i) Σε κάθε επανάληψη του βρόχου έχουμε έναν πολλαπλασιασμό και μία πρόσθεση, άρα είναι
ii) Είναι, Μ(n) = O(n). M n n = = 1= n n. i= 1 i= 1 iii) Προφανώς ο αλγόριθμος του Horner είναι αποδοτικότερος του Αλγορίθμου της Άσκησης 6