Στοιχεία Αλγορίθµων και Πολυπλοκότητας Ορέστης Τελέλης telelis@unipi.gr Τµήµα Ψηφιακών Συστηµάτων, Πανεπιστήµιο Πειραιώς Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 1 / 16
«Ζέσταµα» Να γράψετε τις συναρτήσεις σε σειρά αύξουσας τάξης. n + (log n) 2, n 100 + 2 n, n + (log n) 100, 2 n + n!, n 2 + 3 2n, 2 4n + n n2, n(log n) 2 + n 2 log n, n n + (log n) 10 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 2 / 16
Αλγόριθµοι «Ορισµός» Αλγόριθµος είναι µια πεπερασµένη ακολουθία σαφών οδηγιών (ϐηµάτων) για την εκτέλεση ενός υπολογισµού ή την επίλυση ενός προβλήµατος. ιόλου µαθηµατικός «ορισµός», µε υποκειµενικά και αναδροµικά στοιχεία: «σαφείς»: όχι αντικειµενικά σαφές. «οδηγίες»: είναι η οδηγία αλγόριθµος; είναι ο αλγόριθµος οδηγία; «υπολογισµός»: τί είναι; είναι η εκτέλεση αλγορίθµου; (που µε τη σειρά του είναι η εκτέλεση του υπολογισµού;) Επισήµως δεν έχουµε ορθό και πλήρη µαθηµατικό ορισµό του αλγορίθµου ιαθέτουµε ικανοποιητικό (µη πλήρη) ορισµό: Μηχανή ( Alan) Turing Η µελέτη του είναι αντικείµενο της Θεωρίας Υπολογισµού. Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 3 / 16
Επιθυµητά Χαρακτηριστικά Αλγορίθµων Είσοδος: από ένα προδιαγεγραµµένο σύνολο τιµών εισόδου. Εξοδος: από ένα προδιαγεγραµµένο σύνολο τιµών εξόδου. Πληρότητα Περιγραφής: πλήρης και σαφής προδιαγραφή ϐηµάτων. Ορθότητα: παραγωγή ορθής εξόδου για δεδοµένη είσοδο. Πεπερασµένο Πλήθος Βηµάτων: εκτελέσιµων σε πεπερασµένο χρόνο. Γενικότητα: Ενας αλγόριθµος επιλύει ορθά όλα τα «στιγµιότυπα» ενός προβλήµατος και όχι µόνο ένα συγκεκριµένο (για συγκεκριµένη είσοδο). Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 4 / 16
Υπολογιστική Πολυπλοκότητα Αλγορίθµου Ανω φράγµα πλήθους στοιχειωδών πράξεων που εκτελεί ο αλγόριθµος Χειρότερη περίπτωση χρόνου εκτέλεσης, για όλες τις δυνατές εισόδους. Η πολυπλοκότητα (χρόνος χειρότερης περίπτωσης) του αλγορίθµου: είναι συνάρτηση f(n) του µεγέθους n των δεδοµένων εισόδου, εκφράζεται από την τάξη O(f(n)) της συνάρτησης αυτής. Λέµε ότι ο αλγόριθµος: έχει πολυπλοκότητα O(f(n)), ή είναι χρόνου O(f(n)) ή έχει χρόνο (εκτέλεσης) χειρότερης περίπτωσης O(f(n)). Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 5 / 16
Αλγόριθµος Εύρεσης Μεγίστου findmax(a 1, a 2,..., a n : ακέραιοι) 1. max := a 1 2. για i := 2 έως 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). Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 6 / 16
Παραδείγµατα 1. t := 0 2. για i := 1 έως 3 2.1. για j := 1 έως 4 2.1.1. t := t + i j 1. Χρόνος: O(1) 1. t := 0 2. για i := 1 έως n 2.1. για j := 1 έως n 2.1.1. t := t + i + j 2. Χρόνος: O(n 2 ) 1. m := 0 2. για i := 1 έως n 2.1. για j := i + 1 έως n 2.1.1. m := max(ai aj, m) 3. Χρόνος: O(n 2 ) 1. i := 1 2. t := 0 3. όσο i n 3.1. t := t + i 3.2. i := 2 i 4. Χρόνος: O(log n) Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 7 / 16
Επεξηγήσεις 1. 3 «εξωτερικές» επαναλήψεις, έκαστη αποτελούµενη από 4 «εσωτερικές»: σταθερός χρόνος σε κάθε «εσωτερική» επανάληψη. 2. n «εξωτερικές» επαναλήψεις, έκαστη αποτελούµενη από n «εσωτερικές» σταθερός χρόνος σε κάθε «εσωτερική» επανάληψη. 3. Η i-οστή «εξωτερική» επανάληψη έχει n i «εσωτερικές» επαναλήψεις: 1 + 2 + 3 + + (n 1) = n(n 1) 2 = O(n 2 ) 4. Στο τέλος της k-στής επανάληψης ϑα είναι i = 2 k : τερµατισµός όταν 2 k = n + 1 = k = log(n + 1) = O(log n). Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 8 / 16
Υπολογιστική Πολυπλοκότητα: Κάτω Φράγµατα Εχει νόηµα ένα κάτω ϕράγµα Ω(g(n)) στην πολυπλοκότητα αλγορίθµων: είναι το κάτω ϕράγµα του χρόνου χειρότερης περίπτωσης. Ενας αλγόριθµος έχει πολυπλοκότητα Ω(g(n)) αν: υπάρχει οικογένεια εισόδων µεγέθους n τέτοια ώστε: ο χρόνος εκτέλεσης για αυτή την οικογένεια εισόδων να είναι Ω(g(n)). Αλγόριθµος µε πολυπλοκότητα O(f(n)) και Ω(f(n)), έχει πολυπλοκότητα Θ(f(n)). Ενα κάτω φράγµα για την πολυπλοκότητα του findmax: Εκτελεί πάντα τουλάχιστον n 1 επαναλήψεις ανεξάρτητα εισόδου. Επίσης σε κάθε επανάληψη εκτελεί πάντα µία σύγκριση (ανεξάρτητα εισόδου). Εποµένως ο αλγόριθµος έχει πολυπλοκότητα Ω(n) και, άρα, Θ(n). Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 9 / 16
Κι άλλος αλγόριθµος εύρεσης µεγίστου Παράδειγµα Εκτέλεσης findmax2(a 1, a 2,..., a n : ακέραιοι) 1. για i := 1 έως n 1 1.1. αν a i > a i+1 τοτε tmp := a i+1 a i+1 := a i a i := tmp 2. επίστρεψε a n. Είσοδος: a 1 a 2 a 3 a 4 a 5 3 5 7 6 2 1η Επαν.: 3 5 7 6 2 2η Επαν.: 3 5 7 6 2 3η Επαν.: 4η Επαν.: 3 5 7 6 2 3 5 6 7 2 3 5 6 7 2 3 5 6 2 7 Εξετάζει τα στοιχεία στη σειρά i = 1,..., n 1: Αν a i > a i+1, ανταλλάσσει τα περιεχόµενα των a i και a i+1 Τελικά, προωθεί το µεγαλύτερο όλων στο τέλος (στη ϑέση a n ). Πολυπλοκότητα: Θ(n). n 1 επαναλήψεις O(1) χρόνου ανεξάρτητα εισόδου. Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 10 / 16
Ταξινόµηση Φυσαλίδας (BubbleSort) BubbleSort(a 1, a 2,..., a n : ακέραιοι) 1. για i := n έως 2 1.1. findmax2(a 1,..., a i ) findmax2(a 1, a 2,..., a n : ακέραιοι) 1. για i := 1 έως n 1 1.1. αν a i > a i+1 τοτε tmp := a i+1 a i+1 := a i a i := tmp 2. επίστρεψε a n. Είσοδος: 1η Επαν.: 2η Επαν.: 3η Επαν.: 4η Επαν.: a 1 a 2 a 3 a 4 a 5 3 5 7 6 2 3 5 7 6 2 3 5 6 2 7 3 5 6 2 7 3 5 2 6 7 3 5 2 6 7 3 2 5 6 7 3 2 5 6 7 2 3 5 6 7 n 1 κλήσεις στον findmax2, µε είσοδο πίνακα µήκους n, n 1, n 2,..., 2. Αντίστοιχα ο findmax2 εκτελεί n 1, n 2,..., 1 επαναλήψεις O(1) χρόνου. Συνολικός χρόνος: 1 + 2 + + (n 2) + (n 1) = n(n 1)/2 = Θ(n 2 ). Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 11 / 16
Ταξινόµηση Παρεµβολής (InsertionSort) InsertionSort( a 1, a 2,..., a n : ακέραιοι ) 1. για i := 2 έως n: 1.1. tmp := a i 1.2. j := i 1.3. όσο j > 1 και a j 1 tmp: 1.3.1. a j := a j 1 1.3.2. j = j 1 1.4. a j := tmp 2. επίστρεψε a Είσοδος: 1η Επαν.: 2η Επαν.: 3η Επαν.: 4η Επαν.: a 1 a 2 a 3 a 4 a 5 23 12 58 7 10 23 12 58 7 10 12 23 58 7 10 12 23 58 7 10 12 23 58 7 10 12 23 58 7 10 7 12 23 58 10 7 12 23 58 10 7 10 12 23 58 Για κάθε ϑέση i = 2,..., n της ακολουθίας µπορεί να «σπρώξει» το a i το πολύ µέχρι i 1 ϑέσεις προς την αρχή της. εκτελεί το πολύ µέχρι i 1 επαναλήψεις «όσο» (O(1) χρόνου έκαστη). Χρόνος: το πολύ 1 + 2 + + n 1, άρα O(n 2 ) Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 12 / 16
Κάτω Φράγµα Πολυπλοκότητας InsertionSort Αν η είσοδος είναι ήδη ταξινοµηµένη (σε αύξουσα σειρά): η εσωτερική δοµή επανάληψης «όσο» δεν εκτελείται. ο συνολικός χρόνος του αλγορίθµου είναι O(n). Οικογένεια Εισόδων Χειρότερης Περίπτωσης: ακολουθία µήκους n σε «ανάποδη» σειρά (ϕθίνουσα). Ο αλγόριθµος υποχρεώνεται να «σπρώχνει» το a i µέχρι την αρχή της. Τότε εκτελεί ακριβώς (άρα και τουλάχιστον): 1 + 2 + + n 1 = Ω(n 2 ) ϕορές τις στοιχειώδεις πράξεις εντός της δοµής επανάληψης όσο. Εποµένως ο αλγόριθµος έχει χρόνο χειρότερης περίπτωσης Θ(n 2 ). Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 13 / 16
Γραµµική Αναζήτηση LinearSearch {x : ακέραιος, a 1, a 2,..., a n : διαφορετικοί ακέραιοι} 1. i := 1 2. όσο i n και x a i 2.1. i := i + 1 3. αν i n τότε pos := i διαφορετικά pos := 0 4. επίστρεψε pos Ο αλγόριθµος εξετάζει το πολύ όλα τα στοιχεία της ακολουθίας εισόδου Χρόνος χειρότερης περίπτωσης: O(n). Είσοδοι χειρότερης περίπτωσης: ακολουθίες µήκους n µε a n = x και a i x για i = 1,..., n 1. ακολουθίες µήκους n µε a i x για i = 1,..., n. Εποµένως ο αλγόριθµος έχει χρόνο χειρότερης περίπτωσης Θ(n). Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 14 / 16
Υπολογισµός Τιµής Πολυωνύµου Πολυώνυµο n-οστού ϐαθµού: p(x) = a n x n + a n 1 x n 1 + + a 2 x 2 + a 1 x + a 0 a n 0 Ενας «κακός» αλγόριθµος: Poly( x, a 0, a 1,..., a n 1, a n ) 1. p := a 0 2. για i := 1 έως n 2.1 y := 1 2.2 για k := 1 έως i 2.2.1 y := y x 2.3 p := p + a i y 3. επίστρεψε p Στην i-οστή «εξωτερική» επανάληψη: i «εσωτερικές» επαναλήψεις, για τον υπολογισµό του x i. Συνολικός χρόνος n i=1 i = Θ(n2 ) Ανεξάρτητος εισόδου. Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 15 / 16
Υπολογισµός Τιµής Πολυωνύµου ύο αλγόριθµοι χρόνου Θ(n) (ανεξάρτητα εισόδου): Poly1( x, a 0, a 1,..., a n 1, a n ) 1. power := 1 2. y := a 0 3. για i := 1 έως n 3.1. power := power x 3.2. y := y + a i power 4. επίστρεψε y Horner( x, a 0, a 1,..., a n 1, a n ) 1. y := a n 2. για i := 1 έως n 2.1. y := y x + a n i 3. επίστρεψε y Poly1: 3n αριθµητικές πράξεις. Σχήµα Horner: 2n αριθµητικές πράξεις. Σχήµα Horner: p(x) = ( ( (a n x + a n 1 )x + a n 2 )x + )x + a 0 Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 16 / 16