Ενότητα: Δυαδική Αναζήτηση Σχέδιο Δραστηριότητας: Παιχνίδι: Βρες τον αριθμό

Σχετικά έγγραφα
Διορθώσεις σελ

Μάντεψε τον Αριθμό. Έχω Ένα Μυστικό. Το Βρήκα;

Μάντεψε τον Αριθμό Φύλλο Εργασίας 2

Μάντεψε τον Αριθμό. Ενδεικτικές Απαντήσεις Φύλλου Εργασίας. Οδηγίες

Φύλλο Εργασίας 3. Μια γρήγορη επανάληψη από τα προηγούμενα

Μάντεψε τον Αριθμό. Ενδεικτικές Απαντήσεις Φύλλου Εργασίας. Μάντεψε!

Μάντεψε τον Αριθμό. Φύλλο Εργασίας. Μάντεψε!

Τυχαίοι αριθμοί ρίξε μια «ζαριά»

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Mπαρμπούτι. Ενδεικτικές Απαντήσεις Φύλλου Εργασίας. Τυχαιότητα

Mπαρμπούτι. Φύλλο Εργασίας. Τυχαιότητα

Πληρουορική Γ Γσμμασίοσ

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

Ο δ η γ ό ς Ε κ π α ι δ ε υ τ ι κ ο ύ

Μάντεψε τον Αριθμό. Φύλλο Εργασίας. Οδηγίες

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

ΠΑΤΡΩΝΥΜΟ / ΟΝΟΜΑ ΣΥΖΥΓΟΥ 1 ΑΓΟΡΑΣΤΟΥ ΜΑΡΙΑ ΤΟΥ ΔΗΜΗΤΡΙΟΥ 2 ΑΘΑΝΑΣΙΑΔΗΣ ΙΩΑΝΝΗΣ ΤΟΥ ΠΑΥΛΟΥ 3 ΑΚΤΣΟΓΛΟΥ ΣΩΚΡΑΤΗΣ ΤΟΥ ΓΕΩΡΓΙΟΥ

Θέματα Προγραμματισμού Η/Υ

Σημειωματάριο Δευτέρας 30 Οκτ. 2017

Γραφικά υπολογιστών Εργαστήριο 1 Εισαγωγή στην Python

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΩΝ & ΤΑΞΗΣ ΕΣΠΕΡΙΝΩΝ

Γραφικά υπολογιστών Εργαστήριο 2 Παιχνίδια μαντεύματος με τυχαίους αριθμούς και loops

Αντικειμενοστρεφής Προγραμματισμός -Python. Κ.Π. Γιαλούρης

Προγραμματισμός Υπολογιστών Τάξη Γ Αθανασιάδης Χρήστος ΠΕ19 ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

Σημειωματάριο Δευτέρας 9 Οκτ. 2017

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Τελικό επαναληπτικό διαγώνισμα Επιμέλεια: Δρεμούσης Παντελής

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Διαδικασιακός Προγραμματισμός

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αναζήτηση και Ταξινόμηση Χειμερινό Εξάμηνο 2016

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2019 Β ΦΑΣΗ

Φύλλο1. ΠΕΡΙΟΧΗ ΠΡΟΣΛΗΨΗΣ ΑΒΡΑΜΙΔΟΥ ΜΑΡΙΚΑ ΔΗΜΗΤΡΙΟΣ Γ Αθηνών ΑΒΡΑΜΙΔΟΥ ΣΟΦΙΑ ΔΗΜΗΤΡΙΟΣ Λασίθι ΑΓΓΕΛΗ ΑΝΔΡΟΜΑΧΗ ΒΑΣΙΛΕΙΟΣ

ΠΑΥΛΙΝΑ ΠΕ11 25,5 ΚΑΒΑΛΑΣ ΑΝΑΤ. ΑΤΤΙΚΗ

Εκφώνηση άσκησης. Η Κρεμάλα σαν παιχνίδι. Ανάλυση. Μέρος Α Αναφoρά, ανάλυση τακτικής. Υλοποίηση του παιχνιδιού «Κρεμάλα»

ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Το Παιχνίδι της Αφαίρεσης

Α1. 1-Σωστό 2-Λάθος 3-Λάθος 4-Σωστό 5-Σωστό

Εργαστήριο 2: Πίνακες

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

ΘΕΜΑΤΑ ΚΑΙ ΛΥΣΕΙΣ. 1) Έστω η λογική συνάρτηση F = A' + Β'. D + B. C' + C. D' (όπου οι τόνοι δηλώνουν συμπληρώματα).

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ Η/Υ (ΟΜΑΔΑ ΘΕΜΑΤΩΝ A)

Δομές Δεδομένων & Αλγόριθμοι

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

3. Γράψτε μία εντολή που να εμφανίζει π.χ. «Πόσα είναι τα κορίτσια του;» και μία που να εμφανίζει: «Τα κορίτσια του Τζειμς Μποντ είναι 4»

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

Προγραμματισμός Η/Υ (ΤΛ2007 )

Σχεδίαση και Ανάλυση Αλγορίθμων

Κεφάλαιο 13: Φτιάχνοντας παιχνίδια

Κεφάλαιο 8: Προγραμματίζοντας αλγορίθμους έξυπνα και δημιουργικά

Διάλεξη 1. Πράξεις Τελεστές Έλεγχος Ροής

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

ΤΡΙΩΡΗ ΓΡΑΠΤΗ ΔΟΚΙΜΑΣΙΑ

Το Παιχνίδι της Αφαίρεσης

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης

ΕΠΑΝΑΛΗΨΗ ΧΩΡΙΣ ΠΡΟΚΑΘΟΡΙΣΜΕΝΑ ΒΗΜΑΤΑ,ΜΕΤΡΗΤΕΣ,ΜΕΓΙΣΤΟΣ,ΜΕΓΙΣΤΟ ΟΝΟΜΑ Χαμηλόμισθος

Βασικές Ασκήσεις από τα Εργαστήρια της PYTHON (εβδομάδα 5)

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

App Inventor 5ο Μάθημα (Κορώνα γράμματα - επέκταση)

Μπαρμπούτι 2. Τα Κόκκαλα Στον Μάστορα

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

Πατώντας την επιλογή αυτή, ανοίγει ένα παράθυρο που έχει την ίδια μορφή με αυτό που εμφανίζεται όταν δημιουργούμε μία μεταβλητή.

Εκτελέστε τις παρακάτω ενέργειες και απαντήστε στις ερωτήσεις που ακολουθούν

Εισαγωγή στους Η/Υ και τις Εφαρμογές Ενότητα 5: Επεξεργασία δεδομένων με τη γλώσσα προγραμματισμού python Υπο-ενότητα 5.2: Συμβολοσειρές-Έλεγχος Ροής

α) Πώς παίρνουμε αποφάσεις στην καθημερινή μας ζωή; Συμπληρώσετε τον παρακάτω πίνακα: τότε

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

ΜΟΡΙΑ ΠΙΝΑΚΑ ΣΕΙΡΑ ΠΙΝΑΚΑ ΠΕΡΙΟΧΗ ΤΟΠΟΘΕΤΗΣΗΣ ΠΙΝΑΚΑΣ ΑΑ ΕΠΩΝΥΜΟ ΟΝΟΜΑ ΠΑΤΡΩΝΥΜΟ ΚΛΑΔΟΣ ΤΡΙΤΕΚΝΟ Σ ΔΙΕΥΘΥΝΣΗ ΕΚΠ/ΣΗΣ

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

Εισαγωγή στον Προγ/μό Υπολογιστών

Αριστείδης Παλιούρας Ανακαλύψτε το Scratch 2

ΚΕΦΑΛΑΙΟ 5: Αλγόριθµοι

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 8ο Αλγόριθμοι

ΣΤΗΛΗ Β ΑΠΟΤΕΛΕΣΜΑ 1. float(10) α pow(2,3) β abs(-10) γ int(5.6) δ. 10 ε. 5.6 Μονάδες 8 ΣΤΗΛΗ Α ΣΥΝΑΡΤΗΣΗ

Σημειωματάαριο Δευτέρας 16 Οκτ. 2017

Επαναληπτικό διαγώνισμα στην Α.Ε.Π.Π - 18 / Απριλίου / 2010 ΘΕΜΑ 1

ΘΕ16: Αναζήτηση δυαδική αναζήτηση

Σημειωματάριο Τετάρτης 25 Οκτ. 2017

ΚΕΝΤΡΙΚΗ ΟΡΓΑΝΩΤΙΚΗ ΕΠΙΤΡΟΠΗ 8 ου ΠΑΝΕΛΛΗΝΙΟΥ ΔΙΑΓΩΝΙΣΜΟΥ ΠΛΗΡΟΦΟΡΙΚΗΣ 1996 ΠΡΟΚΑΤΑΡΚΤΙΚΗ ΦΑΣΗ ΠΑΝΕΛΛΗΝΙΟΥ ΔΙΑΓΩΝΙΣΜΟΥ ΘΕΜΑΤΑ ΓΥΜΝΑΣΙΟΥ

Σχεδίαση & Ανάλυση Αλγορίθμων

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

Λογικές εκφράσεις και μεταβλητές

Πληροφορική 2. Αλγόριθμοι

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 8: Αναζήτηση και ταξινόμηση

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ

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

Διάλεξη 04: Παραδείγματα Ανάλυσης

Ακρότατα πίνακα, χωρίς min, max, μόνο με pos

Δραστηριότητα 2 a, b = 0,1 a,b = b,a

Δομημένος Προγραμματισμός (ΤΛ1006)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 8 Ο. Ταξινόμηση και Αναζήτηση Συναρτήσεις χειρισμού οθόνης ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Προγραμματιστικές Τεχνικές

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων

A2. Να γράψετε για κάθε περίπτωση τον αριθμό της πρότασης και δίπλα το γράμμα που δίνει τη σωστή επιλογή.

Transcript:

Ενότητα: Δυαδική Αναζήτηση Σχέδιο Δραστηριότητας: Παιχνίδι: Βρες τον αριθμό 1 Εισαγωγή Σκεφτείτε έναν αριθμό από το 1 έως το 1000 και απαντήστε στην ερώτηση: Ο αριθμός που σκεφτήκατε είναι μεγαλύτερος ή μικρότερος από το 500; Τι μπορείτε να εξάγετε από την απάντηση; Μεταξύ ποιων αριθμών πρέπει να ψάξετε τώρα για να βρείτε τον αριθμό; Ποια θα είναι η επόμενη ερώτηση ώστε να περιορίσουμε ακόμα περισσότερο το χώρο αναζήτησης; Η μέθοδος που σκιαγραφείται παραπάνω είναι γνωστή ως Δυαδική αναζήτηση και εκμεταλλεύεται τη διάταξη των στοιχείων του συνόλου, διαμερίζοντας κάθε φορά το σύνολο σε δυο ίσα μέρη, και εφαρμόζοντας πάλι την ίδια μέθοδο στο υποσύνολο στο οποίο ανήκει ο ζητούμενος αριθμός. Δραστηριότητα : Μάντεψε τον αριθμό Βήμα 1: Παραγωγή τυχαίων αριθμών Πολλές φορές θέλουμε να παράγουμε αριθμούς με τυχαίο τρόπο. Η βιβλιοθήκη random περιέχει μια ποικιλία συναρτήσεων για αυτόν τον σκοπό. Δύο από αυτές που θα χρησιμοποιούμε κατά κόρον είναι η randint και η randrange, που επιστρέφουν τυχαίους ακέραιους αριθμούς εντός κάποιων ορίων. Τα όρια στην randrange ακολουθούν την ίδια λογική με την range της Python, ενώ η randint συμπεριλαμβάνει και το δεξιό άκρο. import random number = random.randint(1, 11) # επιστρέφει έναν τυχαίο αριθμό στο [ 1, 10] number = random.randrange(1,10) # επιστρέφει έναν τυχαίο αριθμό στο [ 1, 9] number = random.randrange(10) # επιστρέφει έναν τυχαίο αριθμό στο [ 0, 9] Άσκηση Να γράψετε ένα πρόγραμμα σε Python το οποίο να παράγει τυχαία 6 ακέραιους αριθμούς στο διάστημα [1,45]. Βήμα 2: Ψάχνοντας στα τυφλά Να συμπληρώσετε το παρακάτω πρόγραμμα έτσι ώστε να επιλέγει έναν αριθμό στην τύχη στο διάστημα [1,20] και στη συνέχεια επιτρέπει στον χρήστη να δοκιμάσει όσες προσπάθειες θέλει μέχρι να μαντέψει τον αριθμό. Ο χρήστης μαντεύει στην τύχη χωρίς κάποια συγκεκριμένη στρατηγική, με το πρόγραμμα να χρησιμοποιεί έναν μετρητή, τον guesses, για να μετράει τις προσπάθειες του χρήστη. Στη συνέχεια να προσπαθήσετε να βρείτε τον αριθμό που σκέφτηκε ο υπολογιστής, με διαδοχικές μαντεψιές. Πόσες προσπάθειες χρειάζεστε στην χειρότερη περίπτωση;

import random secret_number = guesses = found = while not found : guess = input( Μάντεψε τον αριθμό : ) guesses = if : print Μπράβο το βρήκες με, guesses, προσπάθειες found = print Δυστυχώς δεν το βρήκες, Ξαναπροσπάθησε 2 Στη συνέχεια να τροποποιήσετε το πρόγραμμα έτσι ώστε να επιτρέπει στον χρήστη μόνο 10 προσπάθειες. Βήμα 3: Καταστρώνοντας τη στρατηγική Θα τροποποιήσουμε το πρόγραμμα έτσι ώστε να δίνει μια βοήθεια στον παίκτη. Θα ελέγχει αν ο αριθμός που μάντεψε είναι μικρότερος ή μεγαλύτερος από τον μυστικό αριθμό και θα εμφανίζει κατάλληλο μήνυμα. Για να γίνει αυτό θα χρειαστεί να προσθέσουμε δυο ακόμα περιπτώσεις στη δομή επιλογής, όπως φαίνεται παρακάτω: if guess == secret_number : print Μπράβο το βρήκες με, guesses, προσπάθειες found = True if guess < secret_number: print Είσαι χαμηλότερα print Είσαι υψηλότερα Έτσι αν ο αριθμός που ψάχνει ο παίκτης είναι μικρότερος από αυτόν που έδωσε, τότε ξέρει ότι πρέπει να ψάξει από εκεί και κάτω, με αποτέλεσμα το μέγεθος του προβλήματος να μειωθεί στο μισό. Να τροποποιήσετε το πρόγραμμα που έχετε αναπτύξει έτσι ώστε να επιτρέπει στον παίκτη μέχρι 10 προσπάθειες. Αν τις ξεπεράσει να εμφανίζει μήνυμα ότι έχασε. Οι αριθμοί όμως τώρα θα είναι στο διάστημα [1,1000]. Τι πιστεύετε; Αρκούν 10 προσπάθειες για 1000 αριθμούς. Αν ναι τότε για 1.000.000 αριθμούς πόσες προσπάθειες πιστεύετε ότι χρειάζονται;

Βήμα 4: Σκέφτεται ο υπολογιστής; Θα είχε ενδιαφέρον η εναλλαγή ρόλων μεταξύ υπολογιστή και παίκτη, όπου ο υπολογιστής θα ρωτάει σε κάθε βήμα και ο χρήστης θα απαντάει ανάλογα. Κάθε φορά που θα λαμβάνουμε μια απάντηση από τον χρήστη πρέπει να περιορίζουμε το σύνολο των δεδομένων στο οποίο γίνεται η αναζήτηση. Για αυτό θα χρειαστούμε δυο μεταβλητές οι οποίες θα καθορίζουν το διάστημα στο οποίο βρίσκεται ο ζητούμενος αριθμός και μια τρίτη για το μέσο του διαστήματος. Ακολουθεί ένα παράδειγμα του παιχνιδιού όπου ο μυστικός αριθμός είναι το 11 και το διάστημα είναι το [1,16]. Αρχικά το πρόγραμμά μας ρωτάει τον χρήστη αν ο αριθμός είναι μικρότερος, μεγαλύτερος ή ίσος με το μέσον του διαστήματος που είναι το 8. 3 15 > 8 Ο χρήστης απαντά ότι ο αριθμός είναι μεγαλύτερος από το 8 άρα το διάστημα στο οποίο θα πρέπει να ψάξουμε τώρα είναι από το μέσον και πέρα, δηλαδή από το 9 και πάνω. 11 < 12 Συνεχίζουμε την ίδια διαδικασία υπολογίζοντας πάντα το μέσο του διαστήματος που έχει απομείνει και αναπροσαρμόζοντας κατάλληλα τα άκρα του. Τώρα ο αριθμός που ψάχνουμε είναι μικρότερος από τo 12, άρα βρίσκεται αριστερά του και χρειάζεται να μεταφέρουμε αριστερά το δεξί άκρο. 11 > 10 Όμοια τώρα πρέπει το αριστερό άκρο να έρθει δεξιά. Όπως διαπιστώσατε η εύρεση του μυστικού αριθμού δε χρειάστηκε 16 συγκρίσεις αλλά μόλις 4. Ο αλγόριθμος που μόλις περιγράψαμε είναι γνωστός ως αλγόριθμος της δυαδικής αναζήτησης, γιατί σε κάθε βήμα χωρίζει το χώρο αναζήτησης στο μισό. Στη συγκεκριμένη περίπτωση που ο χώρος αναζήτησης ήταν το διάστημα [1,16] χρειάστηκαν 4 συγκρίσεις, αφού χρειάζονται τέσσερις διαδοχικές διαιρέσεις με το 2 για να καταλήξουμε από 16 στοιχεία σε 1. Μπορείτε να υπολογίσετε πόσες συγκρίσεις θα θέλαμε αν είχαμε 1024 = 2 10 στοιχεία; Στη συνέχεια συμπληρώστε το παρακάτω τμήμα κώδικα ώστε να επιτελεί την παραπάνω λειτουργία.

# Τώρα ο άνθρωπος σκέφτεται έναν αριθμό από 1 έως 1000 Ν = 1000 print Σκέψου έναν αριθμό από το 1 έως το, Ν guesses = 0 found = False first = last = while not found and guesses < 10 : mid = answer = raw_input( Είναι ο αριθμός ο + str(mid) +? (N/O) ) guesses = guesses + 1 if answer == N : found = answer = raw_input ( Είναι μικρότερος του + str(mid) +? (N/O) ) if answer == N : = = if found == True : print Κέρδισα!!! Το βρήκα με, guesses, προσπάθειες print Κέρδισες 4 Στο παραπάνω πρόγραμμα στις μεταβλητές first και last καταχωρούμε τις θέσεις των δυο άκρων του διαστήματος και στην mid το μέσο του διαστήματος αναζήτησης. Δυαδική αναζήτηση σε λίστα Προηγουμένως χρησιμοποιήσαμε τον αλγόριθμο της δυαδικής αναζήτησης για να βρούμε έναν μυστικό αριθμό μέσα σε κάποια όρια. Ο αλγόριθμος βασίζεται στο γεγονός ότι οι αριθμοί είναι διατεταγμένοι κατά αύξουσα σειρά. Για να εφαρμοστεί ο ίδιος αλγόριθμος και σε άλλα δεδομένα, όπως για παράδειγμα σε ονόματα, θα πρέπει αυτά να είναι διατεταγμένα επίσης σε κάποιου είδους σειρά, όπως σε αλφαβητική. Για παράδειγμα με χρήση της δυαδικής αναζήτησης μπορούμε να βρούμε ένα όνομα στον τηλεφωνικό κατάλογο όπου όλα τα ονόματα είναι σε αλφαβητική σειρά. Έτσι μπορούμε να εφαρμόσουμε τη δυαδική αναζήτηση στα στοιχεία μιας λίστας τα οποία βρίσκονται σε κάποια λογική διάταξη είτε αυτά είναι αριθμοί είτε αλφαριθμητικά, όπως φαίνεται παρακάτω, όπου ψάχνουμε τον αριθμό 60 σε μια λίστα 16 αριθμών.

5 Συμπληρώστε τα κενά ώστε η παρακάτω συνάρτηση να επιτελεί δυαδική αναζήτηση του στοιχείου key στα στοιχεία της λίστας array. Θεωρήστε ότι τα στοιχεία της λίστας είναι διατεταγμένα σε αύξουσα σειρά. def binarysearch( array, key ) : first = 0 last = found = False while and not found : mid = ( first + last ) / 2 if : found = True elif : first = mid + 1 last = mid 1 return found Στη συνέχεια να δώσετε στον διερμηνευτή της Python τις παρακάτω εντολές. Τι παρατηρείτε; Να εξηγήσετε τα αποτελέσματα. >>> binarysearch( [1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ], 22) >>> binarysearch( [1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ], 34) >>> binarysearch( [ alpha, beta, gamma, delta, epsilon ], beta ) >>> binarysearch([false, False, False, False, True], False)