ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

Σχετικά έγγραφα
Ενότητα 1: Εισαγωγή Ασκήσεις και Λύσεις

1o Φροντιστήριο ΗΥ240

Εισαγωγή στους Αλγορίθμους

Εισαγωγή στους Αλγορίθμους

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 1

Διοικητική Λογιστική

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού σε κατάσταση Κορεσμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Δομές Δεδομένων Ενότητα 2

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

Αλγόριθμοι και πολυπλοκότητα Συγχωνευτική Ταξινόμηση

Εισαγωγή στους Αλγορίθμους

Ψηφιακή Επεξεργασία Εικόνων

Προγραμματισμός Η/Υ. Βασικές Προγραμματιστικές Δομές. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2)

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 2

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 3: Έλεγχοι στατιστικών υποθέσεων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 1: Καταχώρηση δεδομένων

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

Λογιστική Κόστους Ενότητα 8: Κοστολογική διάρθρωση Κύρια / Βοηθητικά Κέντρα Κόστους.

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 2: Περιγραφική στατιστική

Εισαγωγή στους Αλγορίθμους Ενότητα 10η Άσκηση Αλγόριθμος Dijkstra

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

Διοικητική Λογιστική

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Prim

Μηχανολογικό Σχέδιο Ι

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 9: Αναδρομή

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Ψηφιακή Επεξεργασία Εικόνων

Βέλτιστος Έλεγχος Συστημάτων

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού Υπέρθερμου Ατμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Αλγόριθμοι και πολυπλοκότητα Διαίρει και Κυρίευε

Μυελού των Οστών Ενότητα #1: Ερωτήσεις κατανόησης και αυτόαξιολόγησης

ΗΛΕΚΤΡΟΝΙΚΗ ΙIΙ Ενότητα 6

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Διδακτική Πληροφορικής

Βάσεις Περιβαλλοντικών Δεδομένων

Πληροφορική ΙΙ Θεματική Ενότητα 5

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Κβαντική Επεξεργασία Πληροφορίας

Τεχνικό Σχέδιο - CAD

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Kruskal

Εκκλησιαστικό Δίκαιο. Ενότητα 10η: Ιερά Σύνοδος της Ιεραρχίας και Διαρκής Ιερά Σύνοδος Κυριάκος Κυριαζόπουλος Τμήμα Νομικής Α.Π.Θ.

Ενότητα. Εισαγωγή στις βάσεις δεδομένων

Εισαγωγή στους Υπολογιστές

Κβαντική Επεξεργασία Πληροφορίας

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ψηφιακή Επεξεργασία Σημάτων. Άσκηση 3η. Στυλιανού Ιωάννης. Τμήμα Επιστήμης Υπολογιστών

Εισαγωγή στους Η/Υ. Ενότητα 2β: Αντίστροφο Πρόβλημα. Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών

Δομές Δεδομένων Ενότητα 1

Ενδεικτικές λύσεις ασκήσεων διαχείρισης έργου υπό συνθήκες αβεβαιότητας

Διοίκηση Εξωτερικής Εμπορικής Δραστηριότητας

ΣΥΜΠΕΡΙΦΟΡΑ ΚΑΤΑΝΑΛΩΤΗ

Ψηφιακή Επεξεργασία Εικόνων

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 7: Αλγόριθμοι γραμμικής άλγεβρας

Γενικά Μαθηματικά Ι. Ενότητα 12: Κριτήρια Σύγκλισης Σειρών. Λουκάς Βλάχος Τμήμα Φυσικής ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Μεθοδολογία Έρευνας Κοινωνικών Επιστημών Ενότητα 2: ΣΥΓΚΕΝΤΡΩΣΗ ΠΛΗΡΟΦΟΡΙΩΝ ΜΑΡΚΕΤΙΝΓΚ Λοίζου Ευστράτιος Τμήμα Τεχνολόγων Γεωπόνων-Kατεύθυνση

Διδακτική των εικαστικών τεχνών Ενότητα 1

1 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 4: Συναρτήσεις

Βέλτιστος Έλεγχος Συστημάτων

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Προγραμματισμός Η/Υ. 6 η ενότητα: Συναρτήσεις. Τμήμα. Τεχνολόγων Περιβάλλοντος. ΤΕΙ Ιονίων Νήσων. Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων

Ιστορία της μετάφρασης

Τεχνικό Σχέδιο - CAD

Διδακτική Πληροφορικής

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Λογιστική Κόστους Ενότητα 11: Λογισμός Κόστους (1)

Γραμμική Άλγεβρα και Μαθηματικός Λογισμός για Οικονομικά και Επιχειρησιακά Προβλήματα

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

Αλγόριθμοι και πολυπλοκότητα Ταχυταξινόμηση (Quick-Sort)

Κοινωνία & Υγεία Υγεία Πρόληψη Προαγωγή υγείας: Βαθμίδες πρόληψης

Διδακτική Πληροφορικής

Εισαγωγή στους Αλγορίθμους Ενότητα 11η Άσκηση - Σταθμισμένος Χρονοπρογραμματισμός Διαστημάτων

Εισαγωγή στους Αλγόριθμους

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 3: Συναρτήσεις

ΟΙΚΟΝΟΜΙΚΑ ΜΑΘΗΜΑΤΙΚΑ

Βέλτιστος Έλεγχος Συστημάτων

Λογιστική Κόστους Ενότητα 10: Ασκήσεις Προτύπου Κόστους Αποκλίσεων.

Γενική Φυσική Ενότητα: Ταλαντώσεις

Έλεγχος και Διασφάλιση Ποιότητας Ενότητα 4: Μελέτη ISO Κουππάρης Μιχαήλ Τμήμα Χημείας Εργαστήριο Αναλυτικής Χημείας

Δομημένος Προγραμματισμός

Γραμμική Άλγεβρα και Μαθηματικός Λογισμός για Οικονομικά και Επιχειρησιακά Προβλήματα

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Πρακτική Άσκηση σε σχολεία της δευτεροβάθμιας εκπαίδευσης

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

Τεχνικό Σχέδιο - CAD. Τόξο Κύκλου. Τόξο Κύκλου - Έλλειψη. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Λογιστική Κόστους Ενότητα 11: Λογισμός Κόστους

Θέματα Εφαρμοσμένης. Ενότητα 14.2: Η ψήφος στα πρόσωπα. Θεόδωρος Χατζηπαντελής Τμήμα Πολιτικών Επιστημών ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Μάρκετινγκ Αγροτικών Προϊόντων

Κβαντική Επεξεργασία Πληροφορίας

Βάσεις Περιβαλλοντικών Δεδομένων

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

Προγραμματισμός H/Y Ενότητα 2: Εντολές ελέγχου ροής. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Transcript:

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές δεδομένων Άσκηση αυτοαξιολόγησης 1 Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Ενότητα 1: Εισαγωγή Ασκήσεις και Λύσεις Άσκηση 1 Αποδείξτε τη µεταβατική και τη συµµετρική ιδιότητα του Θ. Λύση Μεταβατική Ιδιότητα (ορισµός): Αν f(n) = Θ(g(n)) και g(n) = Θ(h(n)) τότε f(n)=θ(h(n)). Για να ισχύει f(n)= Θ(h(n)) πρέπει να δείξουµε ότι f(n)= Ο(h(n)) και ότι f(n)= Ω(h(n)). Αποδεικνύουµε πρώτα ότι f(n)= Ο(h(n)). Αφού f(n) = Θ(g(n)) f(n) = Ο(g(n)), άρα: Ů c 1 R + και n 1 0 τ.ω. f(n) c 1 * g(n), n n 1 (1) Αφού g(n) = Θ(h(n)) g(n)= Ο(h(n)), άρα: Ů c 2 R + και n 2 0 τ.ω. g(n) c 2 * h(n), n n 2 (2) Επιλέγουµε n 0 = max{n 1,n 2 } και τότε από (1) και (2) f(n) c 1 * g(n) c 1 * c 2 * h(n), n n 0 Άρα, αν επιλέξουµε c = c 1 * c 2, ισχύει πως c = c 1 * c 2 και n 0 = max{n 1,n 2 } τ.ω. Εποµένως, ισχύει πως f(n) = O(h(n)). f(n) c * h(n), n n 0. Αποδεικνύουµε στη συνέχεια ότι f(n) = Ω(h(n)). Αφού f(n) = Θ(g(n)) f(n)= Ω(g(n)), άρα: Ů c 1 R + και n 1 0 τ.ω. f(n) c 1 * g(n), n n 1 (1) Αφού g(n) = Θ(h(n)) g(n)= Ω(h(n)), άρα Ů c 2 R + και n 2 0 τ.ω. g(n) c 2 * h(n), n n 2 (2) Επιλέγουµε n 0 = max{n 1,n 2 } και τότε από (1) και (2) f(n) c 1 * g(n) c 1 * c 2 * h(n), n n 0 Άρα, αν επιλέξουµε c = c 1 * c 2, ισχύει πως c = c 1 * c 2 και n 0 = max{n 1,n 2 } τ.ω. Άρα f(n) = Ω(h(n)). f(n) c * h(n), n n 0. Αφού ισχύει ότι f(n) = O(h(n)) και ότι f(n) = Ω(h(n)), συµπεραίνουµε ότι f(n) = Θ(h(n)), όπως απαιτείται.

Συµµετρική ιδιότητα (ορισµός): f(n) = Θ(g(n)) αν και µόνο αν g(n) = Θ(f(n)). Θα αποδείξουµε πως αν f(n) = Θ(g(n)) τότε ισχύει πως g(n) = Θ(f(n)). Η απόδειξη του αντίστροφου, δηλαδή η απόδειξη πως αν g(n) = Θ(f(n)) τότε ισχύει πως f(n) = Θ(g(n)), είναι συµµετρική. Για να δείξω ότι g(n) = Θ(f(n)) πρέπει να δείξω ότι g(n) = Ο(f(n)) και g(n) = Ω(f(n)) (1) Αφού f(n) = Θ(g(n)) τότε f(n) = Ο(g(n)). Άρα c 1 R + και n 1 0 τ.ω.: f(n) c 1 g(n), n n 1 g(n) 1/c 1 * f(n), n n 1 Εποµένως, αν επιλέξουµε c = 1/c 1 και n 0 = n 1 προκύπτει ότι g(n) c * f(n), n n 0. Άρα, g(n) = Ω(f(n)). (2) Επιπρόσθετα, αφού f(n) = Θ(g(n)) τότε f(n) = Ω(g(n)). Άρα c 2 R + και n 2 0 τ.ω.: f(n) c 2 g(n), n n 2 g(n) 1/c 2 * f(n), n n 2 Εποµένως, αν επιλέξουµε c = 1/c 2 και n 0 = n 2 προκύπτει ότι g(n) c * f(n), n n 0. Άρα, g(n) = Ο(f(n)). (3) Από (2) και (3) g(n) = Θ(f(n)), όπως απαιτείται. Άσκηση 2 1. Ισχύει ότι log ( ) = O(n 3 ); 2. Ισχύει ότι log ( = Θ( log(n) ); Λύση 1. Εξετάζουµε εάν log ( ) O(n 3 ). Αναζητούµε c R + και ακέραιο n 0 0 τ.ω. log ( ) c * n 3, n n 0 n 5/2 * log n 5/2 c * n 3 n 5/2 * (5/2) log n c * n 3 Ισχύει ότι: 2.5 * n 2.5 * log n 2.5 * n 2.5 * = 2.5 * n 3, n 4 Εποµένως, αν επιλέξουµε c = 2.5 και n 0 = 4 προκύπτει ότι log ( ) c * n 3, n n 0. Άρα, ισχύει ότι log ( ) Ο(n 3 ).

2. Εξετάζουµε εάν log ( ) O(log(n)). Αναζητούµε c R + και ακέραιο n 0 0 τ.ω.: log ( ) c * log(n), n n 0 log n 1/2 c * log(n) ½ log(n) c * log(n) Εποµένως, αν επιλέξουµε c = 1/2 και n 0 = 1 προκύπτει ότι Άρα, ισχύει ότι log ( ) Ο(log n ). log ( ) c * log(n), n n 0 Οµοίως, εξετάζουµε και αν ισχύει ότι log ( ) Ω(log n)). Άσκηση 3 1. Αποδείξτε επαγωγικά ότι αν Τ(0) = 0 και Τ(n) = 2* Τ(n-1) + 1, n > 0, τότε Τ(n) = 2 n 1. 2. Θεωρήστε τη συνάρτηση f : N N που ορίζεται ως εξής : f(0) = 1, f(1) = 2, f(n) = 4 * f(n-2) + 2 n αν n > 1. Αποδείξτε επαγωγικά ότι για κάθε ακέραιο n 3 ισχύει ότι f(n) 3 * n * 2 n-2 Λύση: 1. Με επαγωγή ως προς n. Βάση επαγωγής (n=1): Η αναδροµική σχέση, για n=1 µας δίνει Τ(1) = 2*Τ(1-1) + 1 = 2*Τ(0) +1 = 0 + 1 = 1. Επιπρόσθετα, ισχύει πως 2 1-1 = 2-1 = 1 = Τ(1), όπως απαιτείται. Επαγωγική Υπόθεση: Θεωρούµε οποιονδήποτε ακέραιο n > 1. Έστω ότι ο ισχυρισµός ισχύει για n -1, δηλαδή υποθέτουµε πως ισχύει ότι Τ(n-1) = 2 n-1-1. Επαγωγικό Βήµα: Θα δείξουµε πως ο ισχυρισµός ισχύει και για την τιµή n, δηλαδή θα δείξουµε πως T(n) = 2 n - 1. Από την αναδροµική σχέση, συµπεραίνουµε ότι

T(n) = 2T(n-1) +1. Εποµένως, από την επαγωγική υπόθεση προκύπτει: όπως απαιτείται. 2. Με επαγωγή ως προς n. Τ(n) = 2T(n-1) +1 = 2(2 n-1 1) +1 = 2 n -2 +1 = 2 n -1, Βάση επαγωγής (n=3): Από την αναδροµική σχέση προκύπτει ότι: f(3) = 4 * f(1) +2 3 = 4 * 2 + 8 = 16 (1) Επιπρόσθετα, ισχύει ότι 3 * 3 * 2 1 = 18 16 = f(3) (από (1)). Άρα, ο ισχυρισµός ισχύει για n = 3. Επαγωγική Υπόθεση: Θεωρούµε οποιοδήποτε ακέραιο n > 3 και υποθέτουµε ότι ο ισχυρισµός ισχύει για κάθε τιµή n τ.ω., 3 n < n, δηλαδή υποθέτουµε ότι ισχύει f(n ) 3 * (n ) * 2 n -2, n τ.ω. 3 n < n (2) Επαγωγικό Βήµα: Θα αποδείξουµε ότι ο ισχυρισµός ισχύει για την τιµή n. Από την αναδροµική σχέση προκύπτει ότι f(n) = 4 * f(n-2) +2 n. (3) ιακρίνουµε περιπτώσεις. Περίπτωση 1: n = 4. Στην περίπτωση αυτή, ισχύει ότι f(4) = 4 * f(2) + 2 4 = 4 * f(2) + 16. Από την αναδροµική σχέση προκύπτει ότι f(2) = 4*f(1) + 2 2 = 4 * 1 + 4 = 8. Εποµένως, f(4) = 4 * 8 + 16 = 48. Επιπρόσθετα, ισχύει ότι 3 * 4 * 2 2 = 12 * 4 = 48 f(4). Εποµένως, ο ισχυρισµός ισχύει σε αυτή την περίπτωση. (Είναι αξιοσηµείωτο ότι σε αυτή την περίπτωση, δεν µπορώ να εφαρµόσω την επαγωγική υπόθεση για n = 2, αφού η επαγωγική υπόθεση ισχύει µόνο για κάθε n 3. Περίπτωση 2: n > 4. Από (1) f(n) = 4 * f(n-2) +2 n 4 * (3 * (n-2) * 2 n-4 ) + 2 n = 2 2 (3 * (n-2) * 2 n-4 ) + 2 2 * 2 n-2 3 * (n-2) * 2 n-2 + 4 * 2 n-2 = 3 * n * 2 n-2 6 * 2 n-2 + 4 * 2 n-2 = 3 * n * 2 n-2-2 * 2 n-2 < 3 * n * 2 n-2, (από επαγωγική υπόθεση, όπου n = n-2)

όπως απαιτείται. (Είναι αξιοσηµείωτο ότι, αφού n > 4 σε αυτή την περίπτωση, ισχύει ότι n-2 3 και άρα µπορώ να εφαρµόσω την επαγωγική υπόθεση). Άσκηση 4 Βρείτε την τάξη (βάσει των συµβολισµών Ο,Ω,Θ) της χρονικής πολυπλοκότητας Τ(n) του ακόλουθου αλγόριθµου } Procedure f (integer n){ for (i=1; i n; i++) for(k = n; k n+5; k++) x = x+1; Λύση Το i θα πάρει n διαφορετικές τιµές (i = 1, 2,, n). Για κάθε µια από αυτές τις τιµές, θα εκτελεστεί ο εσωτερικός for βρόγχος. Άρα, ο εσωτερικός for βρόγχος θα εκτελεστεί συνολικά n φορές. Κάθε φορά που εκτελείται ο εσωτερικός for βρόγχος, η µεταβλητή k παίρνει 6 διαφορετικές τιµές (k = n. n+1, n+2, n+3, n+4, n+5). Εποµένως, κάθε φορά που εκτελείται ο εσωτερικός for βρόγχος, η εντολή x = x+1 εκτελείται 6 φορές. Συµπεραίνουµε πως ο συνολικός αριθµός φορών που θα εκτελεστεί η εντολή x = x+1 είναι 6*n. Άρα, η χρονική πολυπλοκότητα T(n) της f() είναι T(n) = O(n). Συνοπτική ιχνηλάτιση της εκτέλεσης της f() παρουσιάζεται στη συνέχεια. Εξωτερικό for loop (ανακύκλωση i=1): (Εσωτερικό for loop:) k =n k=n+1 k=n+2 k=n+3 k=n+4 k=n+5 (τέλος εκτέλεσης εσωτερικού for loop) Εξωτερικό for loop (ανακύκλωση i=2): (Εσωτερικό for loop:) k =n k=n+1 k=n+2 k=n+3 k=n+4 k=n+5 (τέλος εκτέλεσης εσωτερικού for loop)... Εξωτερικό for loop (ανακύκλωση i=n):

(Εσωτερικό for loop:) k =n k=n+1 k=n+2 k=n+3 k=n+4 k=n+5 (τέλος εκτέλεσης εσωτερικού for loop) (Τέλος εκτέλεσης εξωτερικού for loop). Άσκηση 5 ίνεται ο αλγόριθµος Binary Search(), ο οποίος χρησιµοποιείται για την αναζήτηση ενός στοιχείου σε έναν ήδη ταξινοµηµένο πίνακα. Index BinarySearch(Type A[0 N-1], Type value, Index low, Index high) { 1. if (high < low) 2. return -1; //not found 3. mid = low + (high - low) / 2; 4. if (A[mid] > value) 5. return BinarySearch(A, value, low, mid-1); 6. else if (A[mid] < value) 7. return BinarySearch(A, value, mid+1, high); 8. else 9. return mid; //found } 1. Παρουσιάστε σύντοµη περιγραφή του τρόπου λειτουργίας του αλγορίθµου. 2. Ιχνηλατήστε την BinarySearch (Α, 14, 0, 9) για την περίπτωση που Α= [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]. Πρέπει να παρουσιαστούν όλες οι αναδροµικές κλήσεις της BinarySearch µε τη σειρά που καλούνται καθώς και οι τιµές των παραµέτρων Α, value, low, high σε κάθε κλήση. Πρέπει επίσης να παρουσιαστεί ο χώρος στη µνήµη που κατανέµεται για την εκτέλεση των αναδροµικών κλήσεων της BinarySearch. 3. Παρουσιάστε αναδροµική σχέση που να περιγράφει τη χρονική πολυπλοκότητα Τ(n) της BinarySearch για την περίπτωση που n = 2 k, για κάποιο k (δηλαδή για την περίπτωση που το n είναι µια δύναµη του 2). 4. Τι τάξης είναι η πολυπλοκότητα της BinarySearch, αποδείξτε τον ισχυρισµό σας. Λύση 1. Περιγραφή Η BinarySearch() βασίζεται στην τεχνική του διαίρει και κυρίευε, η οποία περιλαµβάνει τρία βήµατα: a. ιαίρεση του προβλήµατος σε διάφορα υποπροβλήµατα που είναι παρόµοια µε το αρχικό πρόβληµα αλλά µικρότερου µεγέθους.

b. Κυριαρχία επί των υποπροβληµάτων, επιλύοντας τα αναδροµικά µέχρι αυτά να γίνουν αρκετά µικρού µεγέθους οπότε και τα επιλύουµε απευθείας. c. Συνδυασµός των επιµέρους λύσεων των υποπροβληµάτων ώστε να συνθέσουµε µια λύση του αρχικού προβλήµατος. Η συνάρτηση παίρνει ως ορίσµατα έναν ταξινοµηµένο πίνακα Α, µία τιµή προς αναζήτηση value, και δύο ακεραίους low και high οι οποίοι υποδηλώνουν τα όρια του πίνακα µέσα στα οποία θα γίνει η αναζήτηση (δηλαδή η αναζήτηση για την τιµή value θα πραγµατοποιηθεί στο µέρος Α[low high] του πίνακα). Η συνάρτηση βρίσκει το µεσαίο στοιχείο mid του προς εξέταση πίνακα A[low high] και ελέγχει αν το στοιχείο στη θέση Α[mid] είναι µεγαλύτερο ή µικρότερο από την προς αναζήτηση τιµή value. Στην περίπτωση που είναι µικρότερο, κάνει αναδροµική κλήση της BinarySearch(A, value, mid+1, high), δηλαδή αναζητά την τιµή value στο άνω µισό του πίνακα Α (αφού το κάτω µισό περιέχει στοιχεία µικρότερα του A[mid] και άρα, αφού ο πίνακας είναι ταξινοµηµένος, µικρότερα και του προς αναζήτηση στοιχείου value). Αντίχτοιχα, αν το A[mid] είναι µεγαλύτερο κάνει αναδροµική κλήση της BinarySearch(A, value, low, mid-1) δηλαδή αναζητά την τιµή value στο κάτω µισό του πίνακα Α (αφού το άνω µισό περιέχει στοιχεία µεγαλύτερα του A[mid] και άρα, αφού ο πίνακας είναι ταξινοµηµένος, µεγαλύτερα και του προς αναζήτηση στοιχείου value). Αν το στοιχείο δε βρεθεί στον πίνακα (δηλαδή φτάσουµε στο σηµείο όπου high < low τότε η συνάρτηση επιστρέφει -1. Αν βρεθεί στοιχείο µε τιµή value, τότε επιστρέφεται η θέση (mid) του πίνακα στην οποία βρέθηκε. 2. Ιχνηλάτιση Ταξινοµηµένος πίνακας: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] BinarySearch ([2, 4, 6, 8, 10, 12, 14, 16, 18, 20], 14, 0, 9): ----------------------------------------------------------------- if (9 < 0) mid = 0+(9-0)/2 = 4 if (10 > 14) else if (10 < 14) --> αποτιµάται σε true BinarySearch ([2, 4, 6, 8, 10, 12, 14, 16, 18, 20], 14, 5, 9): ------------------------------------------------------------ if (9 < 5) mid = 5+(9-5)/2 = 7 if (16 > 14) --> αποτιµάται σε true BinarySearch ([2, 4, 6, 8, 10, 12, 14, 16, 18, 20], 14, 5, 6): ------------------------------------------------ if (6 < 5) mid = 5+(6-5)/2 = 5 if (12 > 14) else if (12 < 14) --> αποτιµάται σε true BinarySearch ([2, 4, 6, 8, 10, 12, 14, 16, 18, 20], 14, 6, 6): ---------------------------------------------- if (6 < 6) mid = 6 + (6-6) / 2 = 6

if (14 > 14) else if (14 < 14) else return 6 //Found Το στοιχείο βρίσκεται στη θέση 6 του πίνακα A[2, 4, 6, 8, 10, 12, 14, 16, 18, 20] -->A[6]=14. Μνήµη Ο πίνακας Α = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] σε όλες τις κλήσεις της BinarySearch(). Value : 6 Low: 0 BinarySearch(A,14,0,9) High: 9 Mid: 4 Value : 6 Low: 5 BinarySearch(A,14,5,9) High: 9 Mid: 7 Value : 6 Low: 5 BinarySearch(A,14,5,5) High: 6 Mid: 5 Value : 6 Low: 6 BinarySearch(A,14,6,6) High: 6 Mid: 6 3. Αναδροµική Σχέση H αναδροµική σχέση είναι η εξής: T(0) = c 1 (1) T(n) = T(n/2) + c 2 (2) Η αναδροµική σχέση προκύπτει ως εξής. Για να προκύψει το µέρος (1) της αναδροµικής σχέσης, µετράµε πόσες στοιχειώδεις εντολές θα εκτελέσει ο αλγόριθµος αν n = 0, δηλαδή µε παράµετρο ένα µέρος του πίνακα µηδενικού µεγέθους (δηλαδή αν high < low). Σε αυτή την

περίπτωση θα εκτελεστούν οι γραµµές 1 και 2 και άρα σε αυτή την περίπτωση δεν θα εκτελεστούν περισσότερες από 3 στοιχειώδεις εντολές (µια για την αρχική κλήση της BinarySearch(), µια για τον έλεγχο της if της γραµµής 1 και µια για την εκτέλεση της return της γραµµής 2). Είναι αξιοσηµείωτο πως, αφού το 3 είναι µια σταθερά, δεν χρειάζεται να είµαστε ακριβείς στην µέτρηση των στοιχειωδών εντολών σε αυτή την περίπτωση, δηλαδή µπορούµε να γράψουµε πως T(0) = c 1, όπως παραπάνω (παρότι τώρα γνωρίζουµε πως c 1 = 3 για τη BinarySearch() που µελετάµε). Για να εξάγουµε το µέρος (2) της αναδροµικής σχέσης, µετράµε πόσες στοιχειώδεις εντολές θα εκτελέσει ο αλγόριθµος σε µια οποιαδήποτε κλήση της ΒinarySearch() χωρίς να υπολογίσουµε το κόστος για τις αναδροµικές κλήσεις. Στην περίπτωση της ΒinarySearch() το κόστος αυτός είναι το κόστος εκτέλεσης των γραµµών 1, 3 και 4, ή 1, 3, 4 και 6, ή 1, 3, 4, 6 και 9 (ανάλογα µε την περίπτωση κάθε φορά). Αν υπολογίσουµε το κόστος εκτέλεσης αυτών των στοιχειωδών εντολών, συµπεραίνουµε ότι αυτό είναι ίσο µε κάποια σταθερά c 2. Σηµειώνουµε ότι δεν είναι σηµαντικό να προσδιορίσουµε την σταθερά αυτή επ ακριβώς, αφού η τιµή της δεν επηρεάζει τη λύση της αναδροµικής εξίσωσης (και άρα η τάξη της πολυπλοκότητας του αλγορίθµου θα προκύψει να είναι η ίδια, όποια και αν είναι η πραγµατική τιµή της σταθεράς c 2 ). 4. Λύση Αναδροµικής Σχέσης Τάξη Χρονικής Πολυπλοκότητας T(n) = T(n/2) + c 2 = (T(n/2 2 ) + c 2 ) +c 2 = Τ(n/2 2 ) + 2 * c 2 = (T(n/2 3 ) + c 2 ) + 2 * c2 = T(n/2 3 ) + 3 * c 2 =... = T(n/2 k ) + k * c 2 Η επαναληπτική αντικατάσταση σταµατάει όταν n/2 k < 1 k > logn. Τότε: T(n) T(0) + (logn + 1) * c 2 = c 1 + (logn + 1) * c 2 = log n + (c 1 + c 2 ) = O(logn). Ευχαριστίες Ευχαριστούµε θερµά την, επί τρία χρόνια, βοηθό του µαθήµατος Χρυσή Μπιρλιράκη για την παραγωγή της ηλεκτρονικής έκδοσης του παραπάνω υλικού.

Σημειώματα Σημείωμα αναφοράς Copyright Πανεπιστήμιο Κρήτης, Παναγιώτα Φατούρου. Παναγιώτα Φατούρου. «Δομές Δεδομένων. Άσκηση αυτοαξιολόγησης 1». Έκδοση: 1.0. Ηράκλειο 2013. Διαθέσιμο από τη δικτυακή διεύθυνση: http://www.csd.uoc.gr/~hy240/. Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση, Όχι Παράγωγο Έργο 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-nc-nd/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί. Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς το Σημείωμα Αδειοδότησης τη δήλωση Διατήρησης Σημειωμάτων το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει) μαζί με τους συνοδευόμενους υπερσυνδέσμους.

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Κρήτης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.