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