Συµβολισµός Ω( ) Τάξη των Συναρτήσεων () Εκτίµηση Πολυπλοκότητας Αλγορίθµων Ορέστης Τελέλης telelis@unipi.gr Ορισµός. Εστω συναρτήσεις: f : N R και g : N R η f(n) είναι Ω( g(n) ) αν υπάρχουν σταθερές C και n 0, τέτοιες ώστε: f(n) C g(n) για κάθε n n 0 Τµήµα Ψηφιακών Συστηµάτων, Πανεπιστήµιο Πειραιώς Κατά τα γνωστά, γράφουµε f(n) = Ω(g(n)) (αλλά ξέρουµε τι εννοούµε). Θεώρηµα. f(n) = Ω(g(n)) αν και µόνο αν g(n) = O(f(n)). Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 1 / 19 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα / 19 Συµβολισµός Ω( ) Συµβολισµός Θ( ) f(n) Ορισµός. Εστω συναρτήσεις: f : N R και g : N R η f(n) είναι fi( g(n) ) αν υπάρχουν σταθερές C 1, C και n 0, τέτοιες ώστε: cg(n) C 1 g(n) f(n) C g(n) για κάθε n n 0 Κατά τα γνωστά, γράφουµε f(n) = Θ(g(n)) (αλλά ξέρουµε τι εννοούµε). Προτάσεις (χρήσιµες για την εκτίµηση του Θ( )): n 0 f = Ω(g) Η f(n) µεγαλώνει τουλάχιστον τόσο γρήγορα όσο ένα σταθερό πολλαπλάσιο της g(n), καθώς το n πηγαίνει στο άπειρο. n f(n) = Θ(g(n)) αν και µόνο αν g(n) = Θ(f(n)). f(n) = Θ(g(n)) αν και µόνο αν f(n) = O(g(n)) και g(n) = O(f(n)). f(n) = Θ(g(n)) αν και µόνο αν f(n) = O(g(n)) και f(n) = Ω(g(n)). Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 3 / 19 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 4 / 19
Απόδειξη Πρότασης Συµβολισµός Θ( ) f(n) = Θ(g(n)) αν και µόνο αν f(n) = O(g(n)) και g(n) = O(f(n)). c g(n) 1. f(n) = Θ(g(n)) = C 1 g(n) f(n) C g(n), για κάθε n n 0. Αρα: c 1g(n) f(n) n n 0 : f(n) C g(n) = f(n) = O(g(n)). n n 0 : g(n) C 1 1 f(n) = g(n) = O(f(n)). { f(n) C1 g(n) για n n 1. f(n) = O(g(n)), g(n) = O(f(n)) g(n) C f(n) για n n n 0 n Αρα: για κάθε n max(n 1, n ): C 1 g(n) f(n) C 1 g(n) Εποµένως: f(n) = Θ(g(n)) Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 5 / 19 f = Θ(g) ηλαδή η f(n) µεγαλώνει ακριβώς τόσο γρήγορα όσο η g(n), καθώς το n πηγαίνει στο άπειρο. Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 6 / 19 Παραδείγµατα Να δείξετε ότι: (1) 8n 3 + 5n + 7 = Ω( n ) () log a n = Θ(log b n), για κάθε δύο ϐάσεις a, b. (3) Ποιά η τάξη της f(n) = 1 + c + c + + c n αναλόγως των τιµών του c; (4) Να εξάγετε έκφραση Θ( ) για την τάξη των πολυωνύµων. (5) Να εξάγετε έκφραση Θ( ) για την τάξη των κλασµάτων πολυωνύµων. (6) Να δείξετε ότι log(n!) = Θ(n log n). Παράδειγµα 3 Αν c < 1: Αν c = 1: Αν c > 1: άθροισµα άπειρων όρων γεωµετρικής προόδου f(n) = 1 + c + c + + c n f(n) 1 = Ω(1) f(n) = 1 + c + c + + c n = k=0 c k = 1 1 c = O(1) n + 1 ϕορές {}}{ 1 + 1 + 1 + + 1 = Θ(n) άθροισµα n + 1 πρώτων όρων γεωµετρικής προόδου f(n) = 1 + c + c + + c n = n k=0 c k = cn+1 1 c 1 = Θ(c n+1 ) Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 7 / 19 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 8 / 19
Παράδειγµα 4α: Η Τάξη των Πολυωνύµων Παράδειγµα 4β: Η Τάξη των Πολυωνύµων Εχουµε δείξει p(n) = O(n k ), για p(n) = n k + 1 n k 1 + + a 0, 0. Μένει να δείξουµε ότι: p(n) = Ω(n k ). Θέτουµε: Τότε, για κάθε n n 0 είναι: C =, και n 0 = max ( 1, ) a i Παρατήρηση. Μπορούµε να υποθέσουµε ότι > 0: Αν < 0, αρκεί να δείξουµε ότι p(n) = Ω(n k ). Τότε ϑα είναι p(n) C n k για n n 0, για κατάλληλα n 0, C. Εποµένως ϑα ισχύει και p(n) C n k, για τα ίδια n 0, C. Αρα ϑα είναι p(n) = Ω(n k ) επίσης. k 1 n a i a i n i (k 1) Παρατηρήστε ότι n i (k 1) 1, για κάθε i = 0,..., k 1, και επειδή n 1. Πολλαπλασιάζοντας µε n (k 1) και τα δύο µέλη: nk a i n i = ( 1)a i n i a i n i Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 9 / 19 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 10 / 19 Παράδειγµα 4γ: Η Τάξη των Πολυωνύµων Παράδειγµα 5: Η Τάξη των Κλασµάτων Πολυωνύµων Θεωρούµε τη συνάρτηση r(n) = p(n)/q(n), όπου: Προσθέτουµε ( /)n k και στα δύο µέλη και έχουµε: n k a k nk a i n i Εποµένως: p(n) nk, για κάθε n n 0. Και είναι C = /, όπως είχαµε ορίσει. Τελικά, p(n) = Ω(n k ). p(n) είναι πολυώνυµο ϐαθµού k q(n) είναι πολυώνυµο ϐαθµού λ. Είναι p(n) = Θ(n k ), άρα: C 1 nk p(n) C 1 n k για n n 1. Είναι q(n) = Θ(n λ ), άρα: C nλ q(n) C n λ, για n n. Εποµένως έχουµε: C 1 n k λ p(n) C q(n) C 1 n k λ, για n max{n 1, n } C Αρα, τελικά r(n) = Θ(n k λ ). Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 11 / 19 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 1 / 19
Ασκηση Αλγόριθµοι «Ορισµός» Να γράψετε τις συναρτήσεις σε σειρά αύξουσας τάξης. n + (log n), n 100 + n, n + (log n) 100, n + n!, n + 3 n, 4n + n n, n(log n) + n log n, n n + (log n) 10 Αλγόριθµος είναι µια πεπερασµένη ακολουθία σαφών οδηγιών (ϐηµάτων) για την εκτέλεση ενός υπολογισµού ή την επίλυση ενός προβλήµατος. ιόλου µαθηµατικός «ορισµός», µε υποκειµενικά και αναδροµικά στοιχεία: «σαφείς»: όχι αντικειµενικά σαφές. «οδηγίες»: είναι η οδηγία αλγόριθµος; είναι ο αλγόριθµος οδηγία; «υπολογισµός»: τί είναι; είναι η εκτέλεση αλγορίθµου; (που µε τη σειρά του είναι η εκτέλεση του υπολογισµού;) Επισήµως δεν έχουµε ορθό και πλήρη µαθηµατικό ορισµό του αλγορίθµου Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 13 / 19 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 14 / 19 Επιθυµητά Χαρακτηριστικά Αλγορίθµων Υπολογιστική Πολυπλοκότητα Αλγορίθµου Είσοδος: από ένα προδιαγεγραµµένο σύνολο τιµών εισόδου. Εξοδος: από ένα προδιαγεγραµµένο σύνολο τιµών εξόδου. Πληρότητα Περιγραφής: πλήρης και σαφής προδιαγραφή ϐηµάτων. Ορθότητα: παραγωγή ορθής εξόδου για δεδοµένη είσοδο. Πεπερασµένο Πλήθος Βηµάτων: εκτελέσιµων σε πεπερασµένο χρόνο. Ανω φράγµα πλήθους στοιχειωδών πράξεων που εκτελεί ο αλγόριθµος Χειρότερη περίπτωση χρόνου εκτέλεσης, για όλες τις δυνατές εισόδους. Η πολυπλοκότητα (χρόνος χειρότερης περίπτωσης) του αλγορίθµου: είναι συνάρτηση f(n) του µεγέθους n των δεδοµένων εισόδου, εκφράζεται από την τάξη O(f(n)) της συνάρτησης αυτής. Λέµε ότι ο αλγόριθµος: Γενικότητα: Ενας αλγόριθµος επιλύει ορθά όλα τα «στιγµιότυπα» ενός προβλήµατος και όχι µόνο ένα συγκεκριµένο (για συγκεκριµένη είσοδο). έχει πολυπλοκότητα O(f(n)), ή είναι χρόνου O(f(n)) ή έχει χρόνο (εκτέλεσης) χειρότερης περίπτωσης O(f(n)). Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 15 / 19 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 16 / 19
Αλγόριθµος Εύρεσης Μεγίστου Παραδείγµατα findmax(a 1, a,..., a n : ακέραιοι) 1. max := a 1. για i := έως n 1. αν max < a i τότε max := a i 3. επίστρεψε max. Περιγραφή µε Ψευδοκώδικα Ενδεικτικές Στοιχειώδεις Πράξεις: int find_max(int a[],int n) { int max, i; max = a[0]; for(i = 1; i < n; i++) if (max < a[i]) max = a[i]; return max; } Υλοποίηση σε γλώσσα C Προσθέσεις, αφαιρέσεις, πολλαπλασιασµοί, διαιρέσεις. Αναθέσεις / Αναγνώσεις / Επιστροφές τιµών µεταβλητών. Συγκρίσεις (π.χ. σε if... else, σε while και σε do... while). 1. t := 0. για i := 1 έως 3:.1. για j := 1 έως 4:.1.1. t := t + i j 1. Χρόνος: O(1) 1. m := 0. για i := 1 έως n:.1. για j := i + 1 έως n:.1.1. m := max(a i a j, m) 3. Χρόνος: O(n ) 1. t := 0. για i := 1 έως n:.1. για j := 1 έως n:.1.1. t := t + i + j. Χρόνος: O(n ) 1. i := 1. t := 0 3. όσο i n: 3.1. t := t + i 3.. i := i 4. Χρόνος: O(log n) Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 17 / 19 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 18 / 19 Επεξηγήσεις 1. 3 «εξωτερικές» επαναλήψεις, έκαστη αποτελούµενη από 4 «εσωτερικές»: σταθερός χρόνος σε κάθε «εσωτερική» επανάληψη.. n «εξωτερικές» επαναλήψεις, έκαστη αποτελούµενη από n «εσωτερικές» σταθερός χρόνος σε κάθε «εσωτερική» επανάληψη. 3. Η i-οστή «εξωτερική» επανάληψη έχει n i «εσωτερικές» επαναλήψεις: 1 + + 3 + + (n 1) = n(n 1) = O(n ) 4. Στο τέλος της k-στής επανάληψης ϑα είναι i = k : τερµατισµός όταν k = n + 1 = k = log(n + 1) = O(log n). Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 19 / 19