Τάξη των Συναρτήσεων (1) Ορέστης Τελέλης telelis@unipi.gr Τµήµα Ψηφιακών Συστηµάτων, Πανεπιστήµιο Πειραιώς 1. Να δειχθεί ότι 7n 2 = O(n 3 ) 2. Να δειχθεί ότι η n 2 δεν είναι O(n). 3. Αληθεύει ότι n 3 = O(7n 2 ); Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 1 / 23 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 2 / 23 Παράδειγµα (1) Παράδειγµα (2) Να δειχθεί ότι 7n 2 = O(n 3 ). Για n n 0 = 7 έχουµε 7n 2 n 3 (πολλαπλασιάζοντας µε n 2 τα δύο µέλη της 7 n). Εποµένως, µπορούµε να ϑέσουµε C = 1 και δείξαµε ότι 7n 2 = O(n 3 ). Εναλλακτικά, για κάθε n 1 = n 0 έχουµε 7n 2 < 7n 3. Εποµένως, ϑέτοντας C = 7 δείχνουµε ότι 7n 2 = O(n 3 ). Να δειχθεί ότι η n 2 δεν είναι O(n) Με απαγωγή σε άτοπο. Εστω ότι n 2 = O(n), εποµένως, υπάρχουν: σταθερές n 0 και C τέτοιες ώστε: n 2 C n, για κάθε n n 0. Αν αυτό είναι αληθές, τότε υπάρχουν σταθερές n 0 και C τέτοιες ώστε: n(n C) 0, για κάθε n n 0 Αυτό όµως δε µπορεί να ισχύει, διότι για οποιαδήποτε εξαρχής επιλογή των n 0 και C, υπάρχουν άπειρα n > C, ώστε n(n C) > 0. ΑΤΟΠΟ Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 3 / 23 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 4 / 23
Παράδειγµα (3) Ανω Φράγµα στην Τάξη των Πολυωνύµων Είδαµε ότι 7n 2 = O(n 3 ). Αληθεύει ότι n 3 = O(7n 2 ); Αν αληθεύει, τότε υπάρχουν σταθερές n 0 και C τέτοιες ώστε: n 3 C 7n 2, για κάθε n n 0 ηλαδή, υπάρχουν σταθερές n 0 και C τέτοιες ώστε: n 2 (n 7 C) 0, για κάθε n n 0 Αυτό δε µπορεί να ισχύει, διότι για οποιαδήποτε εξαρχής επιλογή των n 0 και C υπάρχουν άπειρα n > 7 C, για τα οποία έχουµε: n 2 > 0 n 2 (n 7 C) > 0 n > 7 C Θεώρηµα: Εστω f(n) = a p n p + a p 1 n p 1 + + a 1 n + a 0, όπου: p N, a 0, a 1,..., a p 1, a p είναι πραγµατικοί αριθµοί. Τότε: f(n) = O(n p ). Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 5 / 23 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 6 / 23 Απόδειξη f(n) = a p n p + a p 1 n p 1 + + a 1 n + a 0 a p n p + a p 1 n p 1 + + a 1 n + a 0 = x p ( a p + a p 1 /n + + a 1 /x p 1 + a 0 /x p ) (1) Να δοθεί εκτίµηση O( ) για το άθροισµα των πρώτων n ϑετικών ακεραίων. (2) Να δείξετε ότι log(n!) = O(n log n). x p ( a p + a p 1 + + a 1 + a 0 ) (3) Για κάθε ϐάση b > 1, να δειχθεί ότι log b n = O(n). Εποµένως f(n) C x p, µε C = a p + a p 1 + + a 1 + a 0, για κάθε n n 0 = 1. Αρα, f(n) = O(x p ). Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 7 / 23 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 8 / 23
Παράδειγµα (1) Παράδειγµα (2) Το άθροισµα των πρώτων n ϑετικών ακεραίων: n i = 1 + 2 + 3 + + (n 1) + n i=1 n + n + n + + n + n = n n = n 2 Να δοθεί εκτίµηση O( ) για τη συνάρτηση: Εχουµε: f(n) = n! = { 1 αν n = 0 1 2 n αν n > 0 n! = 1 2 3 n n n n n = n n Εποµένως, n i = O(n 2 ). i=1 Εποµένως n! = O(n n ) (µε n 0 = 1 και C = 1). Λογαριθµίζοντας τα δύο µέλη της ανισότητας n! n n, λαµβάνουµε: Επίσης, n i = i=1 n(n + 1) οδηγεί στο ίδιο αποτέλεσµα. 2 log n! = logn n = n log n Εποµένως, log n! = O(n log n), µε n 0 = 1 και C = 1, και πάλι. Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 9 / 23 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 10 / 23 O( )-Ιεραρχία Απλών Συναρτήσεων Χρήσιµες Παρατηρήσεις Στον άξονα y απεικονίζεται η τιµή log[f(n)], για κάθε συνάρτηση f(n) 10 5 n! 10 4 10 3 10 2 10 1 10 0 2 4 6 8 10 2 n n 2 n log n n log n 1 10 2 n 10 1 10 0 n log n log log n 50 100 150 200 1 Αν d > c > 1, τότε: n c = O(n d ) αλλά n d O(n c ) Για κάθε ϐάση λογαρίθµου b > 1 και για ϑετικούς c και d: (log b n) c = O(n d ) αλλά n d O( (log b n) c ) Για ϑετικό d και b > 1: n d = O(b n ) αλλά b n O(n d ) O(1) O(log log n) O(log n) O((log n) 2 ) Για c > b > 1, έχουµε: b n = O(c n ) αλλά c n O(b n ) O( n) O(n) O(n 2 ) O(2 n ) O(n!) Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 11 / 23 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 12 / 23
Αθροισµα/Γινόµενο Συναρτήσεων Συνδυασµοί Συναρτήσεων (1/2) Αθροισµα: f 1 (n) = O( g 1 (n) ) f 2 (n) = O( g 2 (n) ) ( ) (f 1 + 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 + f 2 )(n) = O max( g 1 (n), g 2 (n) ) Από υπόθεση του ϑεωρήµατος, υπάρχουν σταθερές n 1, C 1, n 2, C 2 τέτοιες ώστε: { f1 (n) C 1 g 1 (n), για κάθε n n 1 Γινόµενο: f 1 (n) = O( g(n) ) f 2 (n) = O( g(n) ) (f 1 f 2 )(n) = O( g 1 (n)g 2 (n) ) f 2 (n) C 2 g 2 (n), για κάθε n n 2 Εχουµε: (f 1 + f 2 )(n) = f 1 (n) + f 2 (n) f 1 (n) + f 2 (n) και, τότε, για κάθε n max( n 1, n 2 ): (f 1 + f 2 )(n) C 1 g 1 (n) + C 2 g 2 (n) = (C 1 + C 2 ) max{ g 1 (n), g 2 (n) που αποδεικνύει (f 1 + f 2 )(n) = O( max( g 1 (n), g 2 (n) ) ), για C = C 1 + C 2. Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 13 / 23 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 14 / 23 Συνδυασµοί Συναρτήσεων (2/2) f 1 (n) = O( g(n) ) f 2 (n) = O( g(n) ) (f 1 + f 2 )(n) = O( g(n) ) Να δοθεί εκτίµηση O( ) για καθεµία από τις ακόλουθες συναρτήσεις: f(n) = 3n log(n!) + (n 2 + 3) log n ικαιολόγηση: (f 1 + f 2 )(n) = O( max( g(n), g(n) ) ) = O( g(n) ) f 1 (n) = O( g 1 (n) ) (f 1 f 2 )(n) = O( g 1 (n)g 2 (n) ) f 2 (n) = O( g 2 (n) ) Απόδειξη: Για κάθε n n 0 = max(n 1, n 2 ): (f 1 f 2 )(n) = f 1 (n) f 2 (n) C 1 g 1 (n) C 2 g 2 (n) C 1 C 2 g 1 (n) g 2 (n) = (C 1 C 2 ) (g 1 g 2 )(n) που αποδεικνύει (f 1 f 2 )(n) = O( g 1 (n) g 2 (n)), για C = C 1 C 2. Εχουµε log(n!) = O(n log n), εποµένως 3n log(n!) = O(n 2 log n). Εχουµε επίσης (n 2 + 3) log n = O(n 2 log n). Εποµένως, f(n) = O(n 2 log n). f(n) = (n + 1) log(n 2 + 1) + 3n 2 log(n 2 + 1) log(2n 2 ) = log 2 + log(n 2 ) = log 2 + 2 log n Εποµένως: (n + 1) log(n 2 + 1) (n + 1)(log 2 + 2 log n) = (log 2)n + 2n log n + log 2 + 2 log n = O(n log n) Εν τέλει, έχουµε f(n) = O(n log n) + O(n 2 ) = O(n 2 ). Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 15 / 23 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 16 / 23
Σύνοψη Ιδιοτήτων Παράδειγµα Πάντα είναι f(n) = O(f(n)) Αν Τότε: Να δώσετε f(n), g(n) τέτοιες ώστε: f(n) O(g(n)) και g(n) O(f(n)) Θεωρούµε τις συναρτήσεις f : N {0, 1 και g : N {0, 1: f(n) = O(g(n)) αf(n) = O(g(n)) (α σταθερά) f 1 (n) = O(g 1 (n)) f 2 (n) = O(g 2 (n)) f(n) = O(h(n)) g(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(n) + g(n) = O(h(n)) f 1 (n)f 2 (n) = O(g 1 (n)g 2 (n)) Ανω ϕράγµα τάξης πολυωνύµου είναι ο µεγιστοβάθµιος όρος f(n) = { 0 n άρτιος 1 n περιττός g(n) = Τότε, για οποιοδήποτε n 0 και για οποιοδήποτε C: { 1 n άρτιος 0 n περιττός υπάρχει άρτιο n 1 n 0 τέτοιο ώστε f(n 1 ) = 0 < 1 = g(n 1 ) άρα δε γίνεται g(n) C f(n) για κάθε n n 0. υπάρχει περιττό n 2 n 0 τέτοιο ώστε f(n 2 ) = 1 > 0 = g(n 2 ) άρα δε γίνεται f(n) C g(n) για κάθε n n 0 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 17 / 23 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 18 / 23 Παράδειγµα Να δείξετε ότι οι παρακάτω συναρτήσεις είναι ίδιας τάξης: Να δοθεί η καλύτερη δυνατή εκτίµηση O( ) για τις ακόλουθες συναρτήσεις: f(n) = (n 5 + n 2 + 1)/(n 3 + 1) f(n) = (2n 2 + 5)/(n + 2), g(n) = (4n 3 + 3n 2 )/(n 2 + 1) Αρκεί Ν Ο f(n) = O(g(n)) και g(n) = O(f(n)). Για κάθε n 5, είναι: f(n) = (n 4 + 5 log n)/(7n 4 + 1) Να δείξετε ότι οι παρακάτω συναρτήσεις είναι ίδιας τάξης: 2n 2 + 5 n + 2 Για κάθε n 2, είναι: = 2n3 + 5n n 2 + 2n 4n3 + n 2 n 2 + 1 < 4n3 + 3n 2 n 2 + 1 f(n) = (2n 2 + 5)/(n + 2), g(n) = (4n 3 + 3n 2 )/(n 2 + 1) 4n 3 + 3n 2 n 2 + 1 = 4n3 n 2 + 1 + = 4 4n2 2n 8 2n2 n + 2 < 8 3n2 n 2 4n + 3 8n + 1 ( 2n 2 n + 2 + 5 ) = 8 2n2 + 5 n + 2 n + 2 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 19 / 23 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 20 / 23
Ορισµοί για «Αλγεβρική» ιευκόλυνση Ορισµοί για «Αλγεβρική» ιευκόλυνση Μπορούµε να ορίσουµε: O( f(n) ) + O( g(n) ) = { h + r : h(n) = O( f(n) ), r(n) = O( g(n) ) αo( g(n) ) = { αf(n) : f(n) = O( g(n) ) O( f(n) )O( g(n) ) = { h r : h = O( f(n) ), r = O( g(n) ) f(n) + O( g(n) ) = { f(n) + h(n) : h(n) = O( g(n) ) f(n)o( g(n) ) = { f(n)h(n) h(n) = O( g(n) ) 2 O( g(n) ) = { f(n) = 2 h(n) h(n) = O( g(n) ) Οµως δεν κάνουµε αυθαίρετα πράξεις µε O( ): είναι σύνολα Πριν τα χειριστούµε αλγεβρικά, ας έχουµε υπόψην τους κατάλληλους ορισµούς Από τους ορισµούς και µέσω των ιδιοτήτων που έχουµε δείξει, αποδεικνύονται: O( f(n) ) + O( g(n) ) = O(max ( f(n), g(n) ) ) αo( g(n) ) = O( g(n) ) O( f(n) )O( g(n) ) = O( f(n)g(n) ) f(n) + O( g(n) ) = O(max ( f(n), g(n) ) ) f(n)o( g(n) ) = O( f(n)g(n) ) Προσοχή: εν είναι 2 O(g(n)) = O(2 g(n) )! Παράδειγµα: Η f(n) = 2 2n είναι 2 O(n) και O(4 n ), αλλά όχι O(2 n ). Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 21 / 23 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 22 / 23 Να δοθεί εκτίµηση O(g(n)) για καθεµία από τις παρακάτω συναρτήσεις, µε χρήση µιας απλής συνάρτησης g(n) της µικρότερης δυνατής τάξης. f(n) = (n 3 + n 2 log n)(log n + 1) + (17 log n + 19)(n 3 + 2) f(n) = (2 n + n 2 )(n 3 + 3 n ) f(n) = (n n + n2 n + 5 n )(n! + 5 n ) f(n) = (n log n + 1) 2 + (log n + 1)(n 2 + 1) Ο. Τελέλης Πανεπιστήµιο Πειραιώς Τάξη Συναρτήσεων 23 / 23