Εισαγωγή στην επιστήμη των υπολογιστών

12
1 Εισαγωγή στην επιστήμη των υπολογιστών Σειριακή και Δυαδική Αναζήτηση

Upload: byron

Post on 22-Jan-2016

60 views

Category:

Documents


0 download

DESCRIPTION

Εισαγωγή στην επιστήμη των υπολογιστών. Σειριακή και Δυαδική Αναζήτηση. Οι αλγόριθμοι της σειριακής και της δυαδικής αναζήτησης χρησιμοποιούνται για την επίλυση προβλημάτων εύρεσης μιας τιμής σε μια λίστα (πχ. Λίστα με τρόφιμα, μαθητές...κλπ). Ι. Αναζήτηση συγκεκριμένης τιμή - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Εισαγωγή στην επιστήμη των υπολογιστών

1

Εισαγωγή στην επιστήμη των υπολογιστών

Σειριακή και Δυαδική Αναζήτηση

Page 2: Εισαγωγή στην επιστήμη των υπολογιστών

2

Οι αλγόριθμοι της σειριακής και της δυαδικής αναζήτησης χρησιμοποιούνται για την επίλυση προβλημάτων εύρεσης μιας τιμής σε μια λίστα (πχ. Λίστα με τρόφιμα, μαθητές...κλπ)

Page 3: Εισαγωγή στην επιστήμη των υπολογιστών

Ι. Αναζήτηση συγκεκριμένης τιμή σε λίστα ταξινομημένη σε φθίνουσα σειρά με τη μέθοδο της σειριακής

αναζήτησης

Page 4: Εισαγωγή στην επιστήμη των υπολογιστών

11 10 8 4 2

Δίνεται η παρακάτω ταξινομημένη σε φθίνουσα σειρά λίστα. Ζητούμε να βρούμε αν υπάρχει στα στοιχεία της ο αριθμός 5.

11 10 8 4 2

Ξεκινάμε την αναζήτηση από το πρώτο στοιχείο του πίνακα. Παρατηρούμε ότι το πρώτο στοιχείο , δηλαδή το 11 είναι μεγαλύτερο και διαφορετικό από το 5. Επομένως συνεχίζουμε την αναζήτηση στο επόμενο στοιχείο του πίνακα.

11 10 8 4 2

Τώρα παρατηρούμε ότι το δεύτερο στοιχείο του πίνακα , δηλαδή το 10 είναι επίσης μεγαλύτερο και διαφορετικό από το 5. Επομένως συνεχίζουμε την αναζήτηση στο επόμενο στοιχείο του πίνακα.

11 10 8 4 2

Στην περίπτωση αυτή το τέταρτο στοιχείο του πίνακα , δηλαδή το 4 είναι μικρότερο από το 5. Επομένως δεν χρειάζεται να συνεχίσουμε την αναζήτηση , αφού τα επόμενα στοιχεία του πίνακα θα είναι μικρότερα από το 5.

Άρα η αναζήτηση στην περίπτωση αυτή ήταν ανεπιτυχής.

Τώρα παρατηρούμε ότι το τρίτο στοιχείο του πίνακα , δηλαδή το 8 είναι επίσης μεγαλύτερο και διαφορετικό από το 5. Επομένως συνεχίζουμε την αναζήτηση στο επόμενο στοιχείο του πίνακα.

11 10 8 4 2

Page 5: Εισαγωγή στην επιστήμη των υπολογιστών

ΙΙ. Αναζήτηση συγκεκριμένης τιμή σε λίστα ταξινομημένη σε αύξουσα σειρά με τη μέθοδο της σειριακής

αναζήτησης

Page 6: Εισαγωγή στην επιστήμη των υπολογιστών

2 4 8 10 11

Δίνεται ο παρακάτω ταξινομημένος σε αύξουσα σειρά πίνακας. Ζητούμε να βρούμε αν υπάρχει στα στοιχεία του ο αριθμός 5.

2 4 8 10 11

Ξεκινάμε την αναζήτηση από το πρώτο στοιχείο του πίνακα. Παρατηρούμε ότι το πρώτο στοιχείο , δηλαδή το 2 είναι μικρότερο και διαφορετικό από το 5. Επομένως συνεχίζουμε την αναζήτηση στο επόμενο στοιχείο του πίνακα.

2 4 8 10 11

Τώρα παρατηρούμε ότι το δεύτερο στοιχείο του πίνακα , δηλαδή το 4 είναι επίσης μικρότερο και διαφορετικό από το 5. Επομένως συνεχίζουμε την αναζήτηση στο επόμενο στοιχείο του πίνακα.

2 4 8 10 11

Στην περίπτωση αυτή το τρίτο στοιχείο του πίνακα , δηλαδή το 8 είναι μεγαλύτερο από το 5. Επομένως δεν χρειάζεται να συνεχίσουμε την αναζήτηση , αφού τα επόμενα στοιχεία του πίνακα θα είναι μεγαλύτερα από το 5.

Άρα η αναζήτηση στην περίπτωση αυτή ήταν ανεπιτυχής.

Page 7: Εισαγωγή στην επιστήμη των υπολογιστών

ΙΙΙ. Αλγόριθμος σειριακής αναζήτησης σε μη ταξινομημένο πίνακα με τη

μέθοδο της σειριακής αναζήτησης

Page 8: Εισαγωγή στην επιστήμη των υπολογιστών

Αλλιώς i<-i+1

Εμφάνισε position Τέλος Σειριακής_αναζήτησης

Αλγόριθμος Σειριακής_αναζήτησης Μεταβλητές Πραγματικές: table[100], key Ακέραιες: n, position, i Λογικές: done Αρχή

Αν table[i]=key τότε done <- αληθής position <- i

Τέλος_αν Τέλος_επανάληψης

done <- ψευδής position <- 0 i<-1

Όσο done=ψευδής Και i<=n επανάλαβε

Διάβασε n, key Για i από 1 μέχρι n Διάβασε table[i] Τέλος_επανάληψης

Στην αρχή τοποθετούμε το τμήμα δηλώσεων των μεταβλητών του προγράμματος

Στην συνέχεια εισάγουμε τα δεδομένα που χρειάζονται για την υλοποίηση του αλγορίθμου.

Στο βήμα αυτό γίνονται οι απαραίτητες αρχικοποιήσεις ορισμένων μεταβλητών.

Στο σημείο αυτό το τοποθετούμε την συνθήκη της επαναληπτικής δομής που θα

χρησιμοποιήσουμε.

Ελέγχουμε μέσα στην επανάληψη ποιο από τα στοιχεία του πίνακα που έχουμε εισάγει είναι ίδιο με το key. Αν βρεθεί τέτοιο στοιχείο , τότε σημειώνουμε τη θέση του στο πίνακα.

Αν το τρέχον στοιχείο του πίνακα δεν είναι ίδιο με το key , τότε θα αυξάνεται ο μετρητής I κατά 1, ώστε να ελέγξουμε το επόμενο στοιχείο.

Τέλος εκτυπώνεται η θέση του πίνακα που βρέθηκε το αναζητούμενο στοιχείο.

Page 9: Εισαγωγή στην επιστήμη των υπολογιστών

Ο αλγόριθμος της δυαδικής αναζήτησης χρησιμοποιεί στη διαδικασία αναζήτησης μια μεθοδολογία «διαίρει και βασίλευε»

•Αναζήτηση ονόματος σε ταξινομημένο κατάλογο

•Αναζήτηση λέξης σε λεξικό

Page 10: Εισαγωγή στην επιστήμη των υπολογιστών

Ι. Αναζήτηση συγκεκριμένης τιμή σε λίστα ταξινομημένη σε αύξουσα

σειρά

Page 11: Εισαγωγή στην επιστήμη των υπολογιστών

362 420 456 530 565 592 600 633

Δίνεται η παρακάτω ταξινομημένη σε αύξουσα σειρά λίστα. Ζητούμε να βρούμε αν υπάρχει στα στοιχεία του ο αριθμός 600, με την χρήση της δυαδικής αναζήτησης.

Ξεκινάμε την αναζήτηση από το μεσαίο στοιχείο της λίστας. Παρατηρούμε ότι το μεσαίο στοιχείο , δηλαδή το 530 είναι μικρότερο από το 600. Επομένως συνεχίζουμε την αναζήτηση σε όλα τα στοιχεία που βρίσκονται μετά το 530, αφού τα υπόλοιπα προφανώς είναι μικρότερα από το 600, συνεχίζοντας με την ίδια λογική.

565 592 600 633

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

600 633

Το μεσαίο στοιχείο στην περίπτωση αυτή είναι το 600 , δηλαδή, το στοιχείο που ψάχνουμε. Επομένως η αναζήτηση είναι επιτυχής και η διαδικασία τερματίζεται εδώ.

Επομένως με την χρήση της δυαδικής αναζήτησης χρειάστηκαν 3 συγκρίσεις για να ολοκληρωθεί η διαδικασία.

Page 12: Εισαγωγή στην επιστήμη των υπολογιστών

Αλλιώς Αν Κλειδί < Πίνακας[Μέση] τότε Τέλος <- Μέση -1 Αλλιώς Αρχή <- Μέση +1

Αν Θέση>0 τότε Εμφάνισε Θέση Αλλιώς Εμφάνισε “Ανεπιτυχής Αναζήτηση” Tέλος_αν Τέλος Αλγορίθμου

Αλγόριθμος Δυαδικής_αναζήτησης Μεταβλητές Ακέραιες: Πίνακας[1000],Πλήθος,i, Κλειδί, Αρχή, Μέση, Τέλος, Θέση Λογικές: Σημαία Αρχή

Μέση <- (Αρχή+Τέλος)/2 Αν Πίνακας[Μέση]=Κλειδί τότε Θέση <- Μέση Σημαία <- Αληθής

Τέλος_αν Τέλος_αν Τέλος_επανάληψης

Σημαία <- ψευδής Τέλος <- Πλήθος Αρχή <- 1 Θέση <- 0

Όσο Αρχή <= Τέλος Και Σημαία = Ψευδής επανάλαβε

Διάβασε Πλήθος, Κλειδί Για i από 1 μέχρι Πλήθος Διάβασε Πίνακας[i] Τέλος_επανάληψης

Στην αρχή τοποθετούμε το τμήμα δηλώσεων των μεταβλητών του προγράμματος

Στην περίπτωση που το μεσαίο στοιχείο δεν είναι το αυτό που ζητάμε τότε θα ελέγξουμε εκείνο το μέρος του πίνακα που πιθανόν βρίσκεται ανάλογα με το αν είναι μεγαλύτερο ή μικρότερο από το μεσαίο στοιχείο, αλλάζοντας τις μεταβλητές Τέλος και Αρχή αντίστοιχα. Στην συνέχεια κλείνουμε τις δομές επιλογής και επανάληψης.

Τέλος αν το στοιχείο βρέθηκε τότε θα εμφανίζεται η θέση του πίνακα στην οποία βρέθηκε. Διαφορετικά θα εμφανίζεται το μήνυμα «Ανεπιτυχής Αναζήτηση».

Στην συνέχεια εισάγουμε τα δεδομένα που χρειάζονται για την υλοποίηση του αλγορίθμου.

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

Ορίσουμε την μεταβλητή Μέση και ελέγχουμε αν το μεσαίο στοιχείο του πίνακα είναι αυτό που αναζητούμε

#include <stdio.h> void main() { int table[1000], n, i, key ; int arxi, mesi, telos, thesi ; scanf(“%d,%d”,&n ,&key); for (i=0; i < n; i++) scanf(“%d”,&table[i]); telos = n-1; arxi = 0; thesi = -1; while (arxi <= telos) { mesi = (arxi+telos)/2; if ( table[mesi] == key) { thesi = mesi; break; } else { if ( key < table[mesi] ) telos = mesi -1; else arxi = mesi +1; } } if (thesi != 0) printf(“%d”,thesi); else printf(“Anepityxhs Anazhthsh”); }