ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι Σεπτέμβριος 008 Κατ οίκον Εργασία Σκελετοί Λύσεων Άσκηση Παρατηρούμε ότι ο χρόνος εκτέλεσης μέσης περίπτωσης της κάθε εντολής if ξεχωριστά: if (c mod 0) for (k ; k < ; k++) p p + ; Παρατηρούμε ότι υπάρχουν δύο κατηγορίες στιγμιότυπων: - c mod 0. Αυτά τα στιγμιότυπα παρουσιάζονται με πιθανότητα ½ και έχουν χρόνο εκτέλεσης. - c mod. Αυτά τα στιγμιότυπα παρουσιάζονται με πιθανότητα ½ και έχουν χρόνο εκτέλεσης Ο(). Επομένως, ο χρόνος εκτέλεσης μέσης περίπτωσης της εντολής είναι της τάξης Ο(). Παρόμοια, η εντολή if (c mod 0) for (k ; k > /; k--) r r + ; έχει χρόνο εκτέλεσης μέσης περίπτωσης της τάξης Ο(), και η εντολή if (c mod 5 0) p p + r; else for (k ; k < ; k++) for (j ; j > /; j--) p p + ; r r + ; χρόνο εκτέλεσης μέσης περίπτωσης της τάξης Ο(²). Συνεπώς ο χρόνος εκτέλεσης μέσης περίπτωσης του εσωτερικού του βρόχου είναι της τάξης Ο(²) και ολόκληρης της συνάρτησης Ο(³). Άσκηση (i) Aν f () O(g()) και f () O(g()) τότε f () O(f ()) ή f () O(f ()). Η πρόταση είναι ψευδής όπως φαίνεται στο πιο κάτω αντιπαράδειγμα. f, ), (, g ( ), if mod 0 if mod if mod 0 if mod Αν και ισχύει ότι f () O(g()) και f () O(g()), f () O(f ()), f () O(f ()). (ii) Αν h() > και f() Ο(g()) τότε f()/g() Ο(g()/h()). f() O(g()), επομένως c, τ.ω. f() c g() για κάθε ()
ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι Σεπτέμβριος 008 Γνωρίζουμε ότι h() > επομένως μπορούμε να διαιρέσουμε και τα δύο μέλη της ανισότητας στην πρόταση () παίρνοντας ότι c, τ.ω. f()/h() c g()/h() για κάθε Συνεπώς, f()/h() O(g()/h()) Άσκηση (i) ² + O(²/) Πρέπει να δείξουμε ότι υπάρχουν σταθερές c και 0 τέτοιες ώστε Έστω ότι c και 0. Αφού, ² + c ( /) για κάθε 0 ² + για κάθε ( και - + 0 για κάθε ) (ii) ( + lg ) Θ( ) Έστω ότι ισχύει, δηλαδή ( + lg ) Θ( ( + lg ) O( ) ( + lg ) Ω( ) ). Τότε () () Από το (), c, 0 τ.ω. ( + lg ) c για κάθε 0, 0 + lg c για κάθε 0, 0 lg c για κάθε 0, 0 Καθώς το τείνει στο άπειρο, το lg τείνει στο άπειρο. Επομένως δεν είναι δυνατόν να υπάρχει θετική σταθερά c που να ικανοποιεί την πιο πάνω σχέση. Αυτό μας δίνει αντίφαση στην αρχική μας υπόθεση και συμπεραίνουμε ότι ( + lg ) O( ) και συνεπώς ότι ( + lg ) Θ( ) (iii) log 4 O(lg ) Έστω ότι ισχύει, δηλαδή log 4 O(lg ), δηλαδή c, 0 τ.ω. log 4 c. lg για κάθε 0 log c. lg log 4 για κάθε 0 lg c. lg για κάθε lg 4 0 c lg 4 για κάθε 0 c.lg 4 για κάθε 0
ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι Σεπτέμβριος 008 Το τείνει στο άπειρο. Επομένως δεν είναι δυνατόν να υπάρχει θετική σταθερά c που να ικανοποιεί την πιο πάνω σχέση. Αυτό μας δίνει αντίφαση στην αρχική μας υπόθεση και συμπεραίνουμε ότι log 4 O(lg) (iv) c + d O( ) για κάθε c, d R + Πρέπει να δείξουμε ότι υπάρχουν σταθερές k και 0 τέτοιες ώστε c + d k. για κάθε 0 Έστω k 9c + d και 0. Θα αποδείξουμε την πιο πάνω πρόταση με τη μέθοδο της επαγωγής. Βάση της επαγωγής: Για, έχουμε ότι ζητούμενο έπεται. c + d c + d k < k m Υπόθεση της επαγωγής: Υποθέτουμε ότι cm + d k. για m. Βήμα της επαγωγής: Θα δείξουμε ότι c( m + ) + d k. m+ 9 k. Παρατηρούμε ότι και το c( m + ) + d cm cm cm < cm k < ( cm m+ + cm + c + d + d + c(m + ) + d + cm + d + cm + d + d) k m m m+ m² Άσκηση 4 Α. Παρατηρούμε ότι το τρίτο for loop της διεργασίας δεν εκτελείται ποτέ. Για να βρούμε τον χρόνο εκτέλεσης της διεργασίας, παρατηρούμε ότι ο χρόνος εκτέλεσης του δεύτερου βρόχου εξαρτάται από την τιμή i, η οποία καθορίζεται από τον εξωτερικό βρόχο. Ο πιο κάτω πίνακας δείχνει τον χρόνο εκτέλεσης των εσωτερικών βρόχων, T,,4 (i), σαν συνάρτηση του i: i 0 - T,,4 (i) 0 0 - κάθε επανάληψης του εξωτερικού βρόχου, δηλαδή: ( ).( ) + + +... + i Θ( ) i 0 B. Οι δύο while βρόγχοι εξαρτούνται από τον εξωτερικό βρόγχο. Ο πρώτος while βρόγχος εξαρτάται από τον εξωτερικό βρόγχο λόγω της τιμής του j που αφαιρείται από το x, ενώ ο δεύτερος λόγω της συνθήκης τερματισμού. Οι δύο while βρόγχοι είναι ανεξάρτητοι μεταξύ τους.
ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι Σεπτέμβριος 008 Ο πιο κάτω πίνακας δείχνει το χρόνο εκτέλεσης του πρώτου while, T (j), σαν συνάρτηση του j: j T (j) / / / Ο συνολικός χρόνος εκτέλεσης του πρώτου while βρόγχου είναι ίσος με το άθροισμα του χρόνου εκτέλεσης κάθε επανάληψης του εξωτερικού βρόχου, δηλαδή: T + / + / +... + / ( + / + / +... + /) O( l ) (Υπόδειξη) Ο πιο κάτω πίνακας δείχνει το χρόνο εκτέλεσης του δεύτερου while, T (j), σαν συνάρτηση του j: j T (j) - - - - Ο συνολικός χρόνος εκτέλεσης του δεύτερου while βρόγχου είναι ίσος με το άθροισμα του χρόνου εκτέλεσης κάθε επανάληψης του εξωτερικού βρόχου, δηλαδή: T + + +... +. ( + + +... + ) ( + ) ( ) Θ( ) κάθε επανάληψης των εξωτερικών βρόχου, δηλαδή: T + T O( ) Γ. Για να βρούμε τον χρόνο εκτέλεσης της διεργασίας, παρατηρούμε ότι ο χρόνος εκτέλεσης του τρίτου βρόχου εξαρτάται από την τιμή i, η οποία καθορίζεται από τον εξωτερικό βρόχο. Υποθέτουμε χωρίς βλάβη της γενικότητας ότι το είναι δύναμη του. Ο πιο κάτω πίνακας δείχνει τον χρόνο εκτέλεσης των εσωτερικών βρόχων, T, (i), σαν συνάρτηση του i: i 4 8 T, (i) - (-) 4(-) 8(-) (-) 4
ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι Σεπτέμβριος 008 κάθε επανάληψης του εξωτερικού βρόχου, δηλαδή: ( ) + ( ) + 4( ) +... + ( ) ( ) ( + + 4 +... + ) ( )( ) Θ( ) Δ. Οι πρώτοι τρεις βρόγχοι της συνάρτησης είναι οι ίδιοι με αυτούς της άσκησης 4Γ, άρα ο χρόνος εκτέλεσης τους Θ( ). Έστω Τ() o χρόνος εκτέλεσης της waste(). Τότε η τιμή του Τ() δίνεται από την πιο κάτω αναδρομική εξίσωση. Τ() Τ() 9*T(/) + (Αν η διαδικασία κάνει δύο πράξεις, μια ανάθεση και μια σύγκριση: Ο()) (Αν > η διαδικασία έχει χρόνο εκτέλεσης όσο και η κλήση των τριών βρόγχων της άσκησης 4Γ (δηλαδή ), και 9 φορές το χρόνος εκτέλεσης του waste(), δηλαδή, σύμφωνα με τον ορισμό της συνάρτησης Τ, Τ(/). Θα λύσουμε την αναδρομική εξίσωση με τη μέθοδο της αντικατάστασης. Θα υποθέσουμε χωρίς βλάβη της γενικότητας ότι το είναι πολλαπλάσιο του : T() 9.T( ) + 9.( 9.T( ) 9 T( ) +... i 9 T( ) + i. i + ) + 9 T( ) + + Θέτουμε k log (δηλαδή k ) και αντικαθιστούμε k για i παίρνοντας ότι: k 9 T( ) + k k ( k ) T( ) + k + lg Θ( lg ) 5