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

Σχετικά έγγραφα
Εργαστήριο 2: Πίνακες

Διάλεξη 17η: Ταξινόμηση και Αναζήτηση

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

4.1 Αναζήτηση. Εισαγωγή στη C++

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

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

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

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

Προγραµµατισµός 1 Ταξινόµηση - Αναζήτηση

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

Αναζήτηση. 1. Σειριακή αναζήτηση 2. Δυαδική Αναζήτηση. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

Αναδρομικοί Αλγόριθμοι

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

Εργαστηριακή Άσκηση 1

Αλγόριθμοι Αναζήτησης

Προγραμματισμός Ι (ΗΥ120)

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

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

Αλγόριθμοι Ταξινόμησης Μέρος 2

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

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 9: ΒΑΣΙΚΕΣ ΤΕΧΝΙΚΕΣ ΣΧΕΔΙΑΣΜΟΥ ΚΑΙ ΑΝΑΛΥΣΗΣ ΑΛΓΟΡΙΘΜΩΝ ΕΞΙΣΟΡΡΟΠΗΣΗ, ΔΙΑΙΡΕΙ ΚΑΙ ΒΑΣΙΛΕΥΕ

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

ΔΥΑΔΙΚΗ ΑΝΑΖΗΤΗΣΗ & ΤΑΞΙΝΟΜΗΣΗ ΜΕ ΣΥΓΧΩΝΕΥΣΗ

Ταξινόμηση με συγχώνευση Merge Sort

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

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

Αλγόριθμοι Ταξινόμησης Bubble Sort Quick Sort. Αντρέας Δημοσθένους Καθηγητής Πληροφορικής Ολυμπιάδα 2012

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

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

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

Διδάσκων: Κωνσταντίνος Κώστα

Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες)

Διδάσκων: Παναγιώτης Ανδρέου

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

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

Αναζήτηση και ταξινόμηση

Τι είναι αλγόριθμος; Υποπρογράμματα (υποαλγόριθμοι) Βασικές αλγοριθμικές δομές

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου

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

ΕΝΟΤΗΤΑ 6 ΛΙΣΤΕΣ ΠΑΡΑΛΕΙΨΗΣ (SKIP LISTS)

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

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

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Δομές Δεδομένων. Ενότητα 2: Στοίβες Εισαγωγή-Υλοποίηση ΑΤΔ Στοίβα με Πίνακα-Εφαρμογή Στοίβας: Αντίστροφη Πολωνική Γραφή. Καθηγήτρια Μαρία Σατρατζέμη

Πίνακες (Arrays) Εισαγωγή στη C++

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Προγραμματισμός Ι. Ενότητα 8 : Πίνακες IΙ. Αλέξανδρος Τζάλλας

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

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

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

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

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

Ενότητα 1: Εισαγωγή Ασκήσεις και Λύσεις

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

ΗΥ-150. Ταξινόµηση και Αναζήτηση

Διάλεξη 5η: Εντολές Επανάληψης

auth Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

Αλγόριθμοι Αναζήτησης. (AeppAcademy.com)

3 ΑΝΑ ΡΟΜΗ ΑΝΑΖΗΤΗΣΗ - ΤΑΞΙΝΟΜΗΣΗ. n! = 1*2*3*..(n-1)*n. n! = 1 αν n = 0, = n*(n-1)! αν n > ΑΝΑ ΡΟΜΗ Εισαγωγή

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

Διάλεξη 19: Αλγόριθμοι ΤαξινόμησηςII. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I

Προγραμματισμός Η/Υ. Ενότητα 8: Ειδικά Θέματα Αλγορίθμων

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

Α2. Να γράψετε στο τετράδιο απαντήσεών σας το κατάλληλο τμήμα κώδικα, κάνοντας τις απαραίτητες αλλαγές σύμφωνα με την εκάστοτε εκφώνηση:

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

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

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

Αλγόριθµοι Τύπου Μείωσης Προβλήµατος

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

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

Προχωρημένες έννοιες προγραμματισμού σε C

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ.

ΠΛΗΡΟΦΟΡΙΚΗ Ι (MATLAB) Ενότητα 5

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Φροντιστήριο 2 ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

Αλγοριθμικές Τεχνικές. Brute Force. Διαίρει και Βασίλευε. Παράδειγμα MergeSort. Παράδειγμα. Τεχνικές Σχεδιασμού Αλγορίθμων

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

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

I. ΑΛΓΟΡΙΘΜΟΣ II. ΠΡΑΞΕΙΣ - ΣΥΝΑΡΤΗΣΕΙΣ III. ΕΠΑΝΑΛΗΨΕΙΣ. 1. Τα πιο συνηθισμένα σενάρια παραβίασης αλγοριθμικών κριτηρίων είναι:

ΗΥ-150. Προγραμματισμός

i : 0<=i<N-1 => data[i] <= data[i+1] 25/10/2009

ΗΥ-150. Προγραμματισμός

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Λύσεις για τις ασκήσεις του lab5

Αλγοριθμικές Τεχνικές

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

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

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

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

Γ7.8 Εγγραφές (Structures) Γ Λυκείου Κατεύθυνσης

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Προγραμματισμός Ι (ΗΥ120)

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

Transcript:

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

Εισαγωγή Αλγόριθμος αναζήτησης θεωρείται ένας αλγόριθμος, ο οποίος προσπαθεί να εντοπίσει ένα στοιχείο με συγκεκριμένες ιδιότητες, μέσα σε μία συλλογή από στοιχεία του ίδιου τύπου. Θα ασχοληθούμε με την αναζήτηση δεδομένων σε πίνακες και θα αναλύσουμε τους αλγόριθμους της σειριακής (sequential) και της δυαδικής (binary) αναζήτησης.

Σειριακή αναζήτηση (Sequential search) Η σειριακή αναζήτηση, ξεκινώντας από το πρώτο στοιχείο του πίνακα, ελέγχει ένα-ένα τα στοιχεία μέχρι να εντοπίσει αυτό που ψάχνει ή να φτάσει στο τελευταίο στοιχείο του πίνακα. bool sequential_search(int arr[], int N, int target){ for (int i = 0; i < N; i++) if (target == arr[i]) return true; // Το στοιχείο βρέθηκε return false; // Το στοιχείο δεν βρέθηκε } https://www.cs.usfca.edu/~galles/visualization/search.html

Σειριακή αναζήτηση (Sequential search) Αν θέλουμε η συνάρτηση να επιστρέφει τη θέση του στοιχείου στον πίνακα, τότε θα αλλάξουμε τον τύπο της συνάρτησης σε integer. Η συνάρτηση θα επιστρέφει τη θέση του στοιχείου, αν αυτό βρεθεί στον πίνακα, αλλιώς θα επιστρέφει την τιμή -1, το οποίο σημαίνει ότι το στοιχείο δεν βρέθηκε. int sequential_search(int arr[], int N, int target){ for (int i = 0; i < N; i++) if (target == arr[i]) return i; // Το στοιχείο βρέθηκε return -1; // Το στοιχείο δεν βρέθηκε }

Σειριακή αναζήτηση (Sequential search) Αν θέλουμε η συνάρτηση να επιστρέφει τη θέση της τελευταίας εμφάνισης, πρέπει να αποθηκεύουμε κάθε φορά τη θέση της πιο πρόσφατης εμφάνισης και να την αλλάζουμε σε κάθε νέα εμφάνιση. int sequential_search(int arr[], int N, int target){ int pos = -1; for (int i = 0; i < N; i++) if (target == arr[i]) pos = i; return pos; //θέση τελευταίας εμφάνισης ή -1 αν δεν βρεθεί }

Παράδειγμα 5.1 Να δημιουργήσετε πρόγραμμα το οποίο να καλεί μία συνάρτηση σειριακής αναζήτησης, η οποία να βρίσκει και να εμφανίζει στην οθόνη το πλήθος των εμφανίσεων ενός χαρακτήρα, μέσα σε έναν πίνακα χαρακτήρων. Το πρόγραμμα θα διαβάζει το πλήθος (Ν) των χαρακτήρων και, ακολούθως, θα αποθηκεύει τους χαρακτήρες σε πίνακα. Στη συνέχεια, θα διαβάζει τον χαρακτήρα τον οποίο θα αναζητήσει και θα καλεί τη συνάρτηση. Παράδειγμα εισόδου 13 C B K J H A C B T Y U B V B Παράδειγμα εξόδου 3 Λύση:

Στρατηγική Διαίρει και Βασίλευε (Divide and Conquer) Στην κατηγορία αυτή οι αλγόριθμοι, αρχικά, διασπούν το πρόβλημα σε μικρότερα προβλήματα. Στη συνέχεια, επιλύουν ανεξάρτητα και διαδοχικά κάθε ένα από τα υποπροβλήματα και, τέλος, συνδυάζουν τις επιμέρους λύσεις με τέτοιο τρόπο, ώστε να σχηματιστεί η λύση του αρχικού προβλήματος.

Στρατηγική Διαίρει και Βασίλευε (Divide and Conquer) Να γεμίσετε έναν πίνακα διαστάσεων 2 n x2 n με τρόμινος, έτσι ώστε να μη μείνουν κενά τετράγωνα. Ο πιο κάτω πίνακας διαστάσεων 8x8 περιέχει και ένα μη προσβάσιμο τετράγωνο.

Δυαδική αναζήτηση (Binary search) Η δυαδική αναζήτηση ανήκει στην κατηγορία αλγορίθμων «Διαίρει και Βασίλευε». Η δυαδική αναζήτηση μπορεί να χρησιμοποιηθεί μόνο αν ο πίνακας είναι ήδη ταξινομημένος. Ο αλγόριθμος ξεκινά εξετάζοντας το «μεσαίο» στοιχείο του πίνακα. Το μεσαίο στοιχείο καθορίζεται βρίσκοντας τον μέσο όρο των θέσεων του πρώτου και του τελευταίου στοιχείου του πίνακα. Αν η τιμή του ζητούμενου στοιχείου είναι μικρότερη από την τιμή του μεσαίου στοιχείου, τότε θα συνεχίσουμε το ψάξιμο στο «αριστερό» μέρος του πίνακα αγνοώντας το «δεξί» μέρος. Διαφορετικά, αν η τιμή του ζητούμενου στοιχείου είναι μεγαλύτερη από την τιμή του μεσαίου στοιχείου, τότε θα ψάξουμε στο «δεξί» μέρος του πίνακα, αγνοώντας το «αριστερό» μέρος. https://www.cs.usfca.edu/~galles/visualization/search.html

Δυαδική αναζήτηση (Binary search) bool binary_search(int arr[], int N, int target) { int first = 0, last = N - 1, mid; while (first <= last) { mid = (first + last) / 2; if (arr[mid] == target) return true; else if (target < arr[mid]) last = mid - 1; else first = mid + 1; } return false; } // Εύρεση μεσαίου στοιχείου // Το στοιχείο βρέθηκε // Ψάξε στον «αριστερό» υποπίνακα // Ψάξε στον «δεξί» υποπίνακα // Το στοιχείο δεν βρέθηκε

Δυαδική αναζήτηση (Binary search) Αν θέλουμε η συνάρτηση να επιστρέφει τη θέση του στοιχείου στον πίνακα, τότε θα αλλάξουμε τον τύπο της συνάρτησης σε integer. Η συνάρτηση θα επιστρέφει τη θέση του στοιχείου, αν αυτό βρεθεί στον πίνακα, αλλιώς θα επιστρέφει την τιμή -1, που σημαίνει ότι το στοιχείο δεν βρέθηκε (last<first).

Δυαδική αναζήτηση (Binary search) int binary_search(int arr[], int N, int target) { int first = 0, last = N - 1, mid; while (first <= last) { mid = (first + last) / 2; if (arr[mid] == target) return mid; else if (target < arr[mid]) last = mid - 1; else first = mid + 1; } return -1; } // Εύρεση μεσαίου στοιχείου // Το στοιχείο βρέθηκε στη θέση mid // Ψάξε στον «αριστερό» υποπίνακα // Ψάξε στον «δεξί» υποπίνακα // Το στοιχείο δεν βρέθηκε

Παράδειγμα 5.3 Να δημιουργήσετε πρόγραμμα το οποίο να καλεί μία συνάρτηση δυαδικής αναζήτησης, η οποία να βρίσκει και να εμφανίζει στην οθόνη τη θέση ενός δεκαδικού αριθμού μέσα σε έναν ταξινομημένο πίνακα δεκαδικών. Το πρόγραμμα, αρχικά, θα διαβάζει το πλήθος (Ν) των αριθμών και, ακολούθως, θα διαβάζει τους αριθμούς και θα τους αποθηκεύει σε πίνακα. Στη συνέχεια, θα διαβάζει τον δεκαδικό τον οποίο θα αναζητήσει και θα καλεί τη συνάρτηση. Αν ο αριθμός προς αναζήτηση δεν βρίσκεται στον πίνακα, η συνάρτηση θα επιστρέφει -1. Παράδειγμα εισόδου 12 5.1 6.2 8.3 10.4 13.5 14.6 18.7 24.8 34.9 55.4 65.1 85.2 55.4 Παράδειγμα εξόδου 9 Λύση: https://ideone.com/d0m398

Παράδειγμα 5.4 Να δημιουργήσετε πρόγραμμα το οποίο να καλεί μία συνάρτηση δυαδικής αναζήτησης, η οποία να βρίσκει και να εμφανίζει στην οθόνη τη θέση της πρώτης εμφάνισης ενός ακέραιου, μέσα σε έναν ταξινομημένο πίνακα ακεραίων. Το πρόγραμμα, αρχικά, θα διαβάζει το πλήθος (Ν) των ακεραίων και, ακολούθως, θα διαβάζει τους ακέραιους και θα τους αποθηκεύει σε πίνακα. Στη συνέχεια, θα διαβάζει τον ακέραιο τον οποίο θα αναζητήσει και θα καλεί τη συνάρτηση. Να θεωρήσετε ότι ο ακέραιος προς αναζήτηση θα εμφανίζεται τουλάχιστον μία φορά στον πίνακα. Παράδειγμα εισόδου 12 5 5 5 5 13 13 13 14 14 15 15 15 13 Παράδειγμα εξόδου 4 Λύση: https://ideone.com/heh02a