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

16
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 3 ο Να εξηγηθεί η σειριακή αναζήτηση. Η λειτουργία της αναζήτησης σε πίνακα είναι η εύρεση της θέσης στην οποία υπάρχει μια συγκεκριμένη τιμή που ενδιαφέρει το χρήστη. Οι πιο γνωστές μέθοδοι αναζήτησης είναι: Η σειριακή και , Η δυαδική. Η σειριακή μέθοδος είναι αρκετά απλή στην υλοποίηση αλλά όχι τόσο αποδοτική . Η δυαδική είναι πιο αποδοτική , αλλά απαιτεί να είναι ο πίνακας ταξινομημένος . 3.6

description

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον,Δομές Δεδομένων,Σειριακή Αναζήτηση.videolearner.com πολυαισθητηριακά μαθήματα.

Transcript of Σειριακή Αναζήτηση

Page 1: Σειριακή Αναζήτηση

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝΚεφάλαιο 3ο

Να εξηγηθεί η σειριακή αναζήτηση.

Η λειτουργία της αναζήτησης σε πίνακα είναι η εύρεση της θέσης στην οποία υπάρχει μια συγκεκριμένη τιμή που ενδιαφέρει το χρήστη.Οι πιο γνωστές μέθοδοι αναζήτησης είναι:

Η σειριακή και ,

Η δυαδική.

Η σειριακή μέθοδος είναι αρκετά απλή στην υλοποίηση αλλά όχι τόσο αποδοτική.

Η δυαδική είναι πιο αποδοτική , αλλά απαιτεί να είναι ο πίνακας ταξινομημένος.

3.6

Page 2: Σειριακή Αναζήτηση

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝΚεφάλαιο 3ο

Να εξηγηθεί η σειριακή αναζήτηση.Σειριακή αναζήτηση

Ας υποθέσουμε ότι έχουμε έναν πίνακα 10 στοιχείων.

5 6 7 -2 160 4 4 1627 761 2 3 4 5 6 7 8 9 10

Και έστω ότι θέλουμε να βρούμε τη θέση του πίνακα που υπάρχει η τιμή 160.Τα βήματα του αλγορίθμου της σειριακής αναζήτησης είναι:

1. Επισκεπτόμαστε το πρώτο στοιχείο του πίνακα.2. Ελέγχουμε αν το στοιχείο του πίνακα ισούται με 160. Αν ναι, πάμε στο 4ο βήμα. Αλλιώς στο 3ο βήμα.

=160 ?????

3. Υπάρχουν ακόμη στοιχεία στον πίνακα;Αν ναι τότε επισκεπτόμαστε το επόμενο στοιχείο και πάμε στο 2ο βήμα.Αν δεν υπάρχουν για έλεγχο, η εκτέλεση του αλγορίθμου πηγαίνει στο 5ο βήμα.

4. Η τιμή που αναζητούσαμε βρέθηκε και ο αλγόριθμος τερματίζει εμφανίζοντας τη θέσηπου βρέθηκε το στοιχείο.

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

3.6

Page 3: Σειριακή Αναζήτηση

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝΚεφάλαιο 3ο

Να εξηγηθεί η σειριακή αναζήτηση.

5 6 7 -2 160 4 4 164 761 2 3 4 5 6 7 8 9 10

Η αναζήτηση της τιμής 160 είναι απλή, γιατί η τιμή 160 υπάρχει μόνο μία φορά στον πίνακα.

Τι γίνεται όμως όταν στην περίπτωση που αναζητήσουμε την τιμή 4!!!!!!Ποια θέση θα εμφανίσουμε στο χρήστη;

Την 1η την 8η ή την 9η ;

Η μέθοδος λοιπόν της σειριακής αναζήτησης μπορεί να χωριστεί σε 3 περιπτώσεις:

1. Εμφάνιση όλων των θέσεων που βρίσκεται το στοιχείο που αναζητούμε.

2. Εμφάνιση της πρώτης θέσης που βρίσκεται το στοιχείο που αναζητούμε.

3. Εμφάνιση της τελευταίας θέσης που βρίσκεται το στοιχείο που αναζητούμε.

Page 4: Σειριακή Αναζήτηση

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝΚεφάλαιο 3ο

Εμφάνιση όλων των θέσεων

5 6 7 -2 160 4 4 164 761 2 3 4 5 6 7 8 9 10

Ο αλγόριθμος εμφανίζει όλες τις θέσεις.Με μία επανάληψη από το 1 έως το πλήθος των στοιχείων του μονοδιάστατου πίνακα. Συγκρίνουμε ένα προς ένα τα στοιχεία του πίνακα με το προς αναζήτηση στοιχείο.Δηλ αν το στοιχείο είναι ίσο με αυτό που αναζητούμε.

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

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

Page 5: Σειριακή Αναζήτηση

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝΚεφάλαιο 3ο

Εμφάνιση όλων των θέσεων

Ο αλγόριθμος είναι οακόλουθος:

Αλγόριθμος Σειριακή_Αναζήτηση_Εμφάνιση_Όλων

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

Για i από 1 μέχρι ΝΕμφάνισε “Δώσε το στοιχείο ”, iΔιάβασε Π[i]

Τέλος_επανάληψηςβρέθηκε← Ψευδής

Εμφάνισε “Δώσε τον πλήθος των στοιχείων του πίνακα.”Διάβασε ΝΕμφάνισε “Δώσε την τιμή χ του πίνακα που αναζητούμε.”Διάβασε X Αλλιώς

γράφω Δεδομένα //Ν,Π,χ//

Για i από 1 μέχρι Ν

Αν Π[i] = Χ τότε

Εμφάνισε “Η τιμή βρέθηκε στη θέση ”, iβρέθηκε← Αληθής

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

Αν βρέθηκε = Ψευδής τότεΕμφάνισε “Η τιμή δεν βρέθηκε στο πίνακα ”

Τέλος_αν

ΛογικήΜεταβλητή

Page 6: Σειριακή Αναζήτηση

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝΚεφάλαιο 3ο

Εμφάνιση της πρώτης θέσης.

Τροποποιούμε τον προηγούμενο αλγόριθμο , ώστε να τερματίζει όταν βρεθεί για πρώτη φορά το στοιχείο που αναζητούμε.

Η τιμή που αναζητούμε μπορεί να υπάρχει σε οποιαδήποτε θέση του πίνακα.

Ή μπορεί να μην υπάρχει καν στον πίνακα.

Δηλ δεν γνωρίζουμεπόσα στοιχεία του πίνακα πρέπει να ελεγχθούν.

Δεν γνωρίζουμε λοιπόνπόσες επαναλήψεις θα κάνουμε.

Οπότε χρησιμοποιούμε τη δομή επανάληψης Όσο….επανέλαβε.

Η επανάληψη θα τερματίζει• είτε όταν βρεθεί η τιμή που αναζητούμε,• είτε όταν η Λογική μεταβλητή γίνει Αληθής .

Page 7: Σειριακή Αναζήτηση

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝΚεφάλαιο 3ο

Εμφάνιση της πρώτης θέσης

Ο αλγόριθμος είναι οακόλουθος:

Αλγόριθμος Σειριακή_Αναζήτηση_Πρώτη_Εμφάνιση

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

Για i από 1 μέχρι ΝΕμφάνισε “Δώσε το στοιχείο ”, iΔιάβασε Π[i]

Τέλος_επανάληψηςβρέθηκε← Ψευδήςi← 1

Εμφάνισε “Δώσε τον πλήθος των στοιχείων του πίνακα.”Διάβασε ΝΕμφάνισε “Δώσε την τιμή X του πίνακα που αναζητούμε.”Διάβασε X Αλλιώς

γράφω Δεδομένα //Ν,Π,χ//

Όσο i ≤ Ν και βρέθηκε=Ψευδής επανέλαβεΑν Π[i] = X τότε

Εμφάνισε “Η τιμή βρέθηκε στη θέση ”, iβρέθηκε← Αληθής

Τέλος_ανi←i+1

Τέλος_επανάληψηςΑν βρέθηκε = Ψευδής τότε

Εμφάνισε “Η τιμή δεν βρέθηκε στο πίνακα ”Τέλος_αν

Page 8: Σειριακή Αναζήτηση

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝΚεφάλαιο 3ο

Εμφάνιση της τελευταίας θέσης.

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

Για να βεβαιωθούμε ότι θα βρούμε την τελευταία θέση που υπάρχει η τιμή.

Κάθε φορά που θα βρίσκουμε τη τιμή που ψάχνουμεθα την εκχωρούμε σε μια μεταβλητή που κρατά τη θέση που βρέθηκε η τιμή.

Αν τη βρούμε στη θέση 1, θα εκχωρήσουμε στη μεταβλητή της θέσης την τιμή 1.

Αν τη βρούμε στη θέση 17, θα εκχωρήσουμε στη μεταβλητή της θέσης την τιμή 17.

Page 9: Σειριακή Αναζήτηση

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝΚεφάλαιο 3ο

Εμφάνιση της τελευταίας θέσης

Ο αλγόριθμος είναι οακόλουθος:

Αλγόριθμος Σειριακή_Αναζήτηση_Τελευταία_Εμφάνιση

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

Για i από 1 μέχρι ΝΕμφάνισε “Δώσε το στοιχείο ”, iΔιάβασε Π[i]

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

βρέθηκε← Ψευδής

Εμφάνισε “Δώσε τον πλήθος των στοιχείων του πίνακα.”Διάβασε ΝΕμφάνισε “Δώσε την τιμή χ του πίνακα που αναζητούμε.”Διάβασε X Αλλιώς

γράφω Δεδομένα //Ν,Π,χ//

Για i από 1 μέχρι Ν

Αν Π[i] = X τότε

θέση ← iβρέθηκε← Αληθής

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

Αν βρέθηκε = Ψευδής τότεΕμφάνισε “Η τιμή δεν βρέθηκε στο πίνακα ”

ΑλλιώςΕμφάνισε “Η τιμή βρέθηκε στο πίνακα στη θέση ”,θέση

Τέλος_αν

Page 10: Σειριακή Αναζήτηση

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝΚεφάλαιο 3ο

Πότε δικαιολογείται η χρήση της σειριακής μεθόδου αναζήτησης;

Η χρήση της σειριακής αναζήτησης δικαιολογείται όταν:

1. Ο πίνακας είναι μη-ταξινομημένος.2. Ο πίνακας είναι μικρού μεγέθους.3. Η αναζήτηση στον πίνακα γίνεται σπάνια.

Page 11: Σειριακή Αναζήτηση

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝΚεφάλαιο 3ο

Ένα λογιστικό γραφείο διατηρεί μια λίστα με ονόματα πελατών και χρήματα σε Ευρώ που χρωστάει κάθε πελάτης. Ο ιδιοκτήτης του λογιστικού γραφείου επιθυμεί να καταχωρήσει τα στοιχεία των πελατών σε μια ή περισσότερες δομές και να μπορεί να εντοπίσει το όνομα του πελάτη που χρωστά τα περισσότερα χρήματα.Ο λογιστής να μπορεί να δώσει όνομα ενός πελάτη και να εμφανίζονται τα χρήματα που οφείλει αν πράγματι είναι πελάτης , αλλιώς να εκτυπώνεται ότι ο πελάτης δεν υπάρχει.Αφού διαβαστούν οι δύο πίνακες , Όνομα και Χρήματα, ο αλγόριθμος θα διαβάζει το όνομα ενός πελάτη και θα το αναζητεί στον πίνακα με τα ονόματα.

ΖυγούρηςΤσάκωναςΛαμπράκουΠαπανικολάουΣακκάς

Πίνακας Ονομάτων

150030002000001200055000

Πίνακας Χρημάτων

Αν είναι πελάτης (!!έχει την ιδιότητα ο πίνακας!!!!) ,τότε θα υπάρχει το όνομα σε κάποια θέση του πίνακα Όνομα.

Ο αλγόριθμος θα εμφανίζει το στοιχείο του πίνακα Χρήματα που υπάρχει στη αντίστοιχη θέση, με τη θέση που βρέθηκε το όνομα πελάτη στο πίνακα Όνομα.

Θα χρησιμοποιήσουμε λοιπόν τον αλγόριθμο αναζήτησης πρώτης εμφάνισης στοιχείουστο πίνακα Όνομα.

3.17 -3.32

Page 12: Σειριακή Αναζήτηση

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝΚεφάλαιο 3ο

Αλγόριθμος Λογιστικό_Γραφείο

Τέλος Λογιστικό_Γραφείο

Ο αλγόριθμος είναιο ακόλουθος:

Για i από 1 μέχρι ΝΕμφάνισε “Δώσε το όνομα του ”, i, “πελάτη”Διάβασε Όνομα[i]

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

Εμφάνισε “Δώσε το πλήθος των πελατών”Διάβασε Ν

Εμφάνισε “Δώσε τα χρήματα που χρωστά”Διάβασε Χρήματα[i]

βρέθηκε← Ψευδήςi ← 1

Εμφάνισε “Δώσε το όνομα του πελάτη”Διάβασε ον_πελάτη

Όσο i ≤ Ν και βρέθηκε=Ψευδής επανέλαβεΑν Όνομα[i] = ον_πελάτη τότε

Εμφάνισε “Ο πελάτης χρωστάει ”,Χρήματα[ i ]βρέθηκε← Αληθής

Τέλος_ανi←i+1

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

Αν βρέθηκε = Ψευδής τότεΕμφάνισε “Δεν είναι πελάτης του γραφείου ”

Τέλος_αν

3.17 -3.32

Page 13: Σειριακή Αναζήτηση

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝΚεφάλαιο 3ο

Σε ένα σχολείο η Β΄ Λυκείου , στην οποία φοιτούν 100 άτομα, αποφάσισε να πάει εκδρομή. Ο πρόεδρος της Β΄ Λυκείου συγκέντρωσε έναν κατάλογο με τα ονόματα όλων των μαθητών και τα χρήματα που έδωσαν. Αν κάποιος μαθητής δεν έδωσε τα χρήματα , τότε θεωρούμε ότι έδωσε 0 Ευρώ. Να γραφεί αλγόριθμος που θα α) εμφανίζει πόσοι και ποιοι μαθητές δεν πλήρωσαν.β) αν ο μαθητής “Κωνσταντίνου” έδωσε χρήματα. Θα χρησιμοποιήσουμε 2 πίνακες. Στον πίνακα Χρήματα θα υπάρχει ο αριθμός 0 , αν κάποιος μαθητής δεν έδωσε χρήματα.

ΓουγάςΔιαμάντης……………..ΠαπαδήμαΔούκα

Όνομα

40

……….73

Χρήματα

Αρκεί να εφαρμόσουμε τον αλγόριθμο αναζήτησης όλων των εμφανίσεων της τιμής 0στον πίνακα Χρήματα.Κάθε φορά που θα βρίσκουμε την τιμή 0, στον πίνακα Χρήματα θα εμφανίζουμε το αντίστοιχο όνομα.

π.χ.

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

Για το β΄ ερώτημα , θα αναζητήσουμε το όνομα Κωνσταντίνου στον πίνακα Όνομα.

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

3.33

Page 14: Σειριακή Αναζήτηση

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝΚεφάλαιο 3ο

Αλγόριθμος Εκδρομή_Λυκείου

Τέλος Εκδρομή_Λυκείου

Ο αλγόριθμος είναιο ακόλουθος:

Για i από 1 μέχρι 100Εμφάνισε “Δώσε το όνομα του ”, i, “μαθητή”Διάβασε Όνομα[i]

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

Εμφάνισε “Δώσε τα χρήματα που έδωσε”Διάβασε Χρήματα[i]

! Επειδή μας ενδιαφέρει να βρούμε μόνο ποιοι μαθητές δεν πλήρωσαν! Δεν χρειάζεται να βάλουμε τη μεταβλητή βρέθηκε.πλήθος ← 0Για i από 1 μέχρι 100

Αν Χρήματα[i] = 0 τότεΕμφάνισε “Δεν έχει δώσει χρήματα ο μαθητής ”,Όνομα[ i ]πλήθος← πλήθος+1

Τέλος_ανΤέλος_επανάληψηςΕμφάνισε “Συνολικά δεν έδωσαν χρήματα ” ,πλήθος, “ μαθητές”βρέθηκε ← Ψευδήςi ← 1

Όσο i ≤ Ν και βρέθηκε=Ψευδής επανέλαβεΑν Όνομα[i] = “Κωνσταντίνου” τότε

Αν Χρήματα[i] = 0 τότεΕμφάνισε “Ο Κωνσταντίνου δεν πλήρωσε.”

ΑλλιώςΕμφάνισε “Ο Κωνσταντίνου πλήρωσε”,Χρήματα[i]

Τέλος_ανβρέθηκε ← ΑληθήςΤέλος_ανi ← i+ 1

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

3.33

Page 15: Σειριακή Αναζήτηση

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝΚεφάλαιο 3ο

Στη βιβλιοθήκη ενός σχολείου υπάρχουν πολλά βιβλία. Έστω ότι κάθε βιβλίο έχει ένα μοναδικό κωδικό και καταχωρείται σε ηλεκτρονικό υπολογιστή ο τίτλος και ο συγγραφέας κάθε βιβλίου. Να γραφεί αλγόριθμος που θα διαβάζει το όνομα ενός συγγραφέα και θα βρίσκει τον κωδικό (ή τους κωδικούς!-επανάληψη! ) και τον τίτλο (ή τους τίτλους ) των βιβλίων αυτού του συγγραφέα που υπάρχουν στη βιβλιοθήκη.

Τα στοιχεία για τα βιβλία θα τα αποθηκεύσουμε σε 3 πίνακες Ν θέσεων. Κατόπιν θα διαβάζουμε τον συγγραφέα ενός βιβλίου και χρησιμοποιώντας τη σειριακή αναζήτησηεμφάνισης όλων των στοιχείων , θα εμφανίζουμε τους κωδικούς και τους τίτλους που αντιστοιχούν σε αυτό τον συγγραφέα.

4324555

75784655

. . . ..

3266737

Κωδικός

ΙΑΠΩΝΙΑΟΙΚΟΛΟΓΙΚΟΣ ΠΟΛΕΜΟΣ

……….ΓΕΝΙΑ 700 €

Τίτλος

ΤΣΟΚΛΗΑΥΓΕΡΟΠΟΥΛΟΣ

……….ΚΟΥΛΟΓΛΟΥ

Συγγραφέας

3.34

Page 16: Σειριακή Αναζήτηση

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝΚεφάλαιο 3ο

Αλγόριθμος Βιβλιοθήκη

Τέλος Βιβλιοθήκη

Ο αλγόριθμος είναιο ακόλουθος:

Εμφάνισε “Δώσε το πλήθος των βιβλίων”Διάβασε Ν

Για i από 1 μέχρι ΝΕμφάνισε “Δώσε τον κωδικό, τον τίτλο και τον συγγραφέα του βιβλίου ”

Διάβασε Κωδικός[ i ],Τίτλος[ i ], Συγγραφέας[ i ]Τέλος_επανάληψης

Εμφάνισε “Δώσε το όνομα ενός συγγραφέα”

Διάβασε ον_συγγραφέαβρέθηκε ← ΨευδήςΓια i από 1 μέχρι Ν

Αν Συγγραφέας[i] = ον_συγγραφέα τότε

Εμφάνισε “Κωδικός βιβλίου ” , Κωδικός[ i ]

Εμφάνισε “Τίτλος βιβλίου ” ,Τίτλος[ i ]

βρέθηκε ← ΑληθήςΤέλος_αν

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

Αν βρέθηκε = Ψευδής τότεΕμφάνισε “Δεν υπάρχουν βιβλία του συγκεκριμένου συγγραφέα. ”

Τέλος_αν

3.34