Διάλεξη : Παραδείγματα Ανάλυσης Πολυπλοκότητας / Ανάλυση Αναδρομικών Αλγόριθμων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Παραδείγματα Ανάλυσης Πολυπλοκότητας : Μέθοδοι, 6 παραδείγματα Γραμμική και Δυαδική Αναζήτηση, Ανάλυση Αναδρομικών Αλγορίθμων Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. -
Υπολογισμός Χρόνου Εκτέλεσης με φωλιασμένους βρόχους και συνθήκες if Σε ένα βρόχο (for loop) o συνολικός χρόνος που απαιτείται είναι : Βασική Πράξη x Αριθμό Επαναλήψεων Φωλιασμένοι Βρόχοι: η ανάλυση γίνεται από τα μέσα προς τα έξω for (i0; i<; i++) for (j0; j<; j++) k++; Φωλιασμένος Βρόχος Συνεχόμενες Εντολές: Ο χρόνος εκτέλεσης της εντολής S και μετά S παίρνει χρόνο ίσο του αθροίσματος των χρόνων εκτέλεσης των S + S. Συνθήκες if: Ο χρόνος εκτέλεσης της εντολής if b the S else S παίρνει χρόνο ίσο με max(t(b)+t(s), T(b)+T(S )) ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. -3
Παράδειγμα : Υπολογισμός Χρόνου Εκτέλεσης. it i, j, sum0; for (i0; i<; i++) for (j0; j<; j++) sum++; Ανάλυση Εσωτερικός βρόχος: Εξωτερικός βρόχος: j i Συνολικά: * ( ) i j ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. -4
Παράδειγμα 3: Υπολογισμός Χρόνου Εκτέλεσης 3. it i, j, sum0; for (i0; i<; i++) for (j0; j<i*i; j++) sum++; Ανάλυση B i Εσωτερικός βρόχος: Εξωτερικός βρόχος: Εκτελείται φορές Συνολικά: i i ( 6 ( 3 + i B + )( 6 + + ) ji δηλ., + ) 6 6 ( 3 + i i 3 6 i 0 3 ( + )( 6 + + )( Για i, δείχνει πόσες φορές εκτελείται το j. - + + ) 6 j 0 4 9 (-) ( Συνολικά; ) 3 i ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. -5 ) i
Παράδειγμα 4: Υπολογισμός Χρόνου Εκτέλεσης it i, j, k, sum0; for (i0; i<; i++) for (j0; j<; j++) for (k0; k<; k++) sum++ Ανάλυση Βρόχος (Β): Βρόχος (B): Εξωτερικός βρόχος: k j B * j Συνολικά: i B 3 * i ε Θ ( 3 ) ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. -6
Παράδειγμα 5: Υπολογισμός Χρόνου Εκτέλεσης. it i, j, sum0; for (i; i<; i *i) for (j0; j<; j++) sum++ Ανάλυση Εσωτερικός βρόχος: j Συνολικά log βήματα Για i, δείχνει πόσες φορές εκτελείται το j { i 4 8. j Εξωτερικός βρόχος:,, 4, 8,, i Συνολικά: i i log log i log Επομένως το i εκτελείται τουλαχιστο log φορές (Θα υποθέτουμε ότι είναι δύναμη του ) Θ( *log ) log i ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. -7
Παράδειγμα 6: Υπολογισμός Χρόνου Εκτέλεσης (Με συνθήκη if) it i, j, sum0; for (i0; i<; i++) if (( % ) 0) // άρτιος for (j0; j<; j++) sum++ else // περιττός sum--; Ανάλυση (Βασική πράξη πρόσθεση/αφαίρεση) α) N περιττός: i β) N άρτιος: i ( ) ( ) Παρατηρούμε ότι δεν καταλήγουμε στο MAX(odd, eve), εφόσον πάντα θα εκτελείται μόνο ένα από τα δυο σκέλη της συνθήκης. Εάν η συνθήκη ήταν ((i % ) 0)τότε θα μπορούσαμε να πούμε ότι έχουμε O() χρόνο. ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. -8
Παράδειγμα 7: Χρόνος Εκτέλεσης Bubblesort void bubblesort( it X[], it ){ it i,j,temp; it swapped 0; for (i0;i<-;i++) { swapped 0; for (j0;j<-i-;j++) { if (X[j]>X[j+]) { temp X[j]; X[j] X[j+]; X[j+] temp; swapped ; if (swapped0) retur; Ανάλυση Εσωτερικός βρόχος: Συνολικά: i i( ) i( i ) i ( ) i( ) i( ) i ( )( ) i i( ) ( ) ( )( ) ( ) ( )( ) ( )( ) ( )( ) ( ) i i ( +) -9
Γραμμική Vs Δυαδική Διερεύνηση (Ανάλυση) Δεδομένα Εισόδου: Πίνακας Χ με στοιχεία, ταξινομημένος από το μικρότερο στο μεγαλύτερο, και ακέραιος k. Στόχος: Να εξακριβώσουμε αν το k είναι στοιχείο του Χ. Γραμμική Διερεύνηση: εξερευνούμε τον πίνακα από τα αριστερά στα δεξιά. it liear( it X[], it, it k){ it i0; while ( i < ) { if (X[i] k) retur i; if (X[i] > k) retur -; i++; retur -; Xείριστη περίπτωση: Ο() (ο βρόχος εκτελείται φορές) X 8 5 7 8 30 33 ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. -0
Αναδρομική Γραμμική Διερεύνηση it rliear( it X[], it, it k, it pos){ if (pos ) retur -; // ot foud if (X[pos] k) retur pos; // foud else if (X[pos] > k) retur -; // larger foud - skip rest retur rliear(x,, k, pos+); X 8 5 7 8 30 33 Xείριστη περίπτωση: Ο() (εκτελούνται αναδρομικές κλήσεις της rliear) ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. -
Δυαδική Διερεύνηση Δυαδική Διερεύνηση: βρίσκουμε το μέσο του πίνακα και αποφασίζουμε αν το k ανήκει στο δεξιό ή το αριστερό μισό. Επαναλαμβάνουμε την ίδια διαδικασία στο "μισό" που μας ενδιαφέρει. it biary( it X[],it,it k){ it low 0, high -; it mid; while ( low < high ){ mid low+(high-low)/; if (X[mid] k) retur mid; else if (X[mid] < k) low mid + ; else if (X[mid] > k) retur -; high mid-; X K5? 8 5 7 8 30 33 0 3 4 5 6 low mid high mid mid3 Ίδιο με (low+high)/. Ωστόσο η έκδοση αυτή μπορεί να υποφέρει από υπερχείλιση ακεραίου. ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. -
Αναδρομική Δυαδική Διερεύνηση it BS_aux(it list[],it low,it high,it k) { it mid; K5? if (low<high) { midlow+(high-low)/; if (list[mid]k) X 8 5 8 retur mid; low mid else if (k<list[mid]) mid3 mid retur BS_aux(list,low,mid-,k); else retur BS_aux(list,mid+,high,k); retur -; BiarySearch(it A[], it, it k) { it low 0, high -; retur BS_aux(A, low, high, k); Τα όρια δίδονται σαν παράμετρο 7 30 33 0 3 4 5 6 high ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. -3
Δυαδική Διερεύνηση Χρόνος Εκτέλεσης Η βασική πράξη (σύγκριση) εκτελείται Ο(log ) φορές δηλαδή: Εκτέλεση -> Μας απομένει* / του πίνακα, Εκτέλεση -> Μας απομένει /4 του πίνακα, Εκτέλεση 3 -> Μας απομένει /8 του πίνακα, Εκτέλεση Χ -> Μας απομένει στοιχείο του πίνακα, Στην εκτέλεση Χ είτε βρήκαμε το στοιχείο είτε όχι δηλ.έχουμε την ακολουθία, /, /4, /8,, 4,,, <> 0,,, 3,, x Το x εκφράζει πόσες φορές εκτελούμε το while loop x x log log x log Biary Search ε Ο(log ) * Χωρίς βλάβη της γενικότητας, θεωρήστε ότι είναι ζυγός ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. -4
Πολυπλοκότητα Αναδρομικών Διαδικασιών Μέχρι τώρα συζητήσαμε τεχνικές για την ανάλυση επαναληπτικών αλγορίθμων (με while, for, κτλ.) Ωστόσο, πολλοί αλγόριθμοι ορίζονται αναδρομικά (π.χ. biary search, Fiboacci, etc) Θέλουμε κάποια μεθοδολογία για να αναλύουμε την πολυπλοκότητα τέτοιων αναδρομικών εξισώσεων. π.χ. Τ() T(/) +000 Τ()*T(-), >0 κτλ. Σημειώστε ότι υπάρχουν διάφοροι τύποι αναδρομικών εξισώσεων. Πολλοί τύποι χρειάζονται ειδικά εργαλεία τα οποία δεν θα δούμε σε αυτό το μάθημα. Ένα τύπο που θα μελετήσουμε θα είναι οι Αναδρομικές Εξισώσεις τύπου «Διαίρει και Βασίλευε» Θα τις επιλύσουμε με την Μέθοδο της Αντικατάστασης και θα τις επαληθεύουμε με το Θεώρημα Master -5
Ανάλυση Αναδρομικής Δυαδικής Διερεύνησης Ας ξαναδούμε την αναδρομική έκδοση της δυαδικής αναζήτησης it BS_aux(it list[],it low,it high,it k) { it mid; if (low<high) { midlow+(high-low)/; if (list[mid]a) retur mid; else if (k<list[mid]) retur BS_aux(list,low,mid-,k); else retur BS_aux(list,mid+,high,k); retur -; X K5? 8 5 7 8 30 33 0 3 4 5 6 low mid high mid mid3 Από ότι βλέπουμε σε κάθε εκτέλεση το biary_search μοιράζει μια ακολουθία στοιχείων σε / στοιχεία (εάν είναι ζυγός). Επομένως το πρόβλημα μεγέθους έγινε τώρα /. Σε κάθε βήμα χρειαζόμαστε και δυο συγκρίσεις (τα δυο if statemets) O χρόνος εκτέλεσης της biary_search εκφράζεται με την αναδρομική συνάρτηση: f() f(/) + // αναδρομικό βήμα f() // συνθήκη τερματισμού -6
Ανάλυση Αναδρομικής Δυαδικής Διερεύνησης Μέθοδος της Αντικατάστασης Μέθοδος της Αντικατάστασης Χρησιμοποιούμε το βήμα της αναδρομής επαναληπτικά, μέχρι να εκφράσουμε το Τ() ως συνάρτηση της βασικής περίπτωσης, δυνάμεις του και σταθερές τιμές. Εφαρμογή Έχουμε την αναδρομική εξίσωση της δυαδικής διερεύνησης (Τύπου Διαίρει και Βασίλευε) Τ() T(/) +, T() για κάθε Τότε, αντικαθιστώντας το Τ(/) με την τιμή του παίρνουμε Τ() T(/) + T(/4) + + T(/8) + + + (Μπορούμε τώρα να μαντέψουμε ότι ) +... + + + log φορές Επομένως η δυαδική αναζήτηση εκτελείται log βήματα Biary Search ε Ο(log ) ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. -7
Ανάλυση Αναδρομικής Δυαδικής Διερεύνησης Στην δυαδική διερεύνηση η ακολουθία μοιράζεται ως εξής:, /, /4,,,. Προσοχή: Δεν σημαίνει ότι έχουμε +/+ /4+ + + - εκτελέσεις. Έχουμε μονάχα log εκτελέσεις Ανάλογα με το σε πόσα κομμάτια «διαιρείται» το πρόβλημα κάθε φορά, αλλάζει και η βάση του λογάριθμου. log log 3 0 3 4 5 6 7 3 8 9 0 9 5 0 04 048 30,073,74,84 0.5849650.398095.5849650.8073549 3 3.699500 3.398095 9 0 30 0 0.63099754.6859507.4649735.63099754.7743749.897896.09590374 5.67836778 6.30997536 6.940789 8.97896 Αριθμός πράξεων, /, /4,,, ί :log, /3, /9,, 3, ί :log3 Όσο μεγαλύτερη η βάση του λογάριθμου τόσο πιο λίγες εκτελέσεις του αλγόριθμου έχουμε! Ωστόσο, αυξάνονται οι συγκρίσεις σε κάθε εκτέλεση! Πχ δυαδική διερεύνηση: lg εκτελέσεις, έλεγχο σε κάθε βήμα. -8
Ανάλυση Αναδρομικής Δυαδικής Διερεύνησης Master Theorem To Master Theorem μας επιτρέπει να βρίσκουμε ή να επαληθεύουμε την χρονική πολυπλοκότητα αναδρομικών εξισώσεων τύπου διαίρει και βασίλευε. Διαίρει και Βασίλευε: πχ. Τ() T(/) + αλλά όχι Τ()*T(-) Αυτό το θεώρημα δεν χρειάζεται να τον απομνημονεύσετε αλλά μπορείτε να τον χρησιμοποιήσετε για την επαλήθευση ασκήσεων. ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. -9
Ανάλυση Αναδρομικής Δυαδικής Διερεύνησης Master Theorem - Εφαρμογή Αναδρομική Δυαδική Αναζήτηση Τ() T(/) + για κάθε T() a, b, c, d0 (δες τύπο Master) a και b d 0 T() is O( d log) T() is O( 0 log) T() is O(log) ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. -0
Παράδειγμα - Μέθοδος της αντικατάστασης Έχουμε την αναδρομική εξίσωση Τ() 4T(/) +, T() για κάθε Τότε, αντικαθιστώντας το Τ(/) με την τιμή του παίρνουμε Τ() 4T(/) + // Εκτέλεση 4(4T(/4) + /) + // Εκτέλεση 4²Τ(/4) + + // Πράξεις 4³Τ(/8) + ² + + // Εκτέλεση 3... Μπορούμε τώρα να μαντέψουμε ότι 4 k Τ() + k- + +² + + // klog log 4 + * + ( ) O( + *( log i log log i 0 ) ) ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. - // i 0 i +
Παράδειγμα 3 - Μέθοδος της αντικατάστασης Άσκηση Να λύσετε την πιο κάτω αναδρομική εξίσωση με την μέθοδο της αντικατάστασης (προσοχή δεν είναι τύπου διαίρει & βασίλευε) Τ(0) Τ()*T(-), >0 Λύση Τ() **T(-) * *(-)*T(-) 3* *(-)*(-)*T(-3).(Μπορούμε τώρα να μαντέψουμε ότι ) **(-)*(-)*...***T(0) *! ε Ο(!) ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. -