Η δυαδική αναζήτηση είναι ένας από τους ευκολότερους τρόπους εύρεσης ενός στοιχείου σε έναν πίνακα
Πολύ συχνά, προγραμματιστές, ακόμη και αρχάριοι,αντιμετωπίζουν ότι υπάρχει ένα σύνολο αριθμών στους οποίους είναι απαραίτητο να βρεθεί ένας ορισμένος αριθμός. Αυτή η συλλογή ονομάζεται συστοιχία. Και για να βρείτε το σωστό στοιχείο σε αυτό, υπάρχουν πολλοί τρόποι. Αλλά η απλούστερη από αυτές από δεξιά μπορεί να θεωρηθεί δυαδική αναζήτηση. Ποια είναι η μέθοδος; Και πώς να υλοποιήσετε μια δυαδική αναζήτηση; Το Pascal είναι το απλούστερο μέσο για την οργάνωση ενός τέτοιου προγράμματος, οπότε θα το χρησιμοποιήσουμε για μελέτη.
Πρώτον, θα αναλύσουμε ποια είναι τα πλεονεκτήματα αυτής της μεθόδου, τελικά, έτσι ώστε να κατανοήσουμε,
Λοιπόν, ποια είναι η αρχή λειτουργίας αυτούμέθοδο; Αξίζει να σημειωθεί ότι η δυαδική αναζήτηση δεν λειτουργεί σε κανέναν πίνακα, αλλά μόνο σε ένα ταξινομημένο σύνολο αριθμών. Σε κάθε επόμενο βήμα, λαμβάνεται το μεσαίο στοιχείο του πίνακα (αναφερόμενο στον αριθμό στοιχείου). Εάν ο επιθυμητός αριθμός είναι μεγαλύτερος από τον μέσο όρο, τότε όλα που βρίσκονται στα αριστερά, δηλαδή λιγότερο από το μέσο στοιχείο, μπορούν να απορριφθούν και να μην αναζητηθούν εκεί. Αντίθετα, εάν είναι μικρότερος από τον μέσο όρο, μεταξύ των αριθμών στα δεξιά, δεν μπορείτε να τα αναζητήσετε. Στη συνέχεια, θα επιλέξουμε μια νέα περιοχή αναζήτησης, όπου το μεσαίο στοιχείο ολόκληρης της συστοιχίας θα είναι το πρώτο στοιχείο και το τελευταίο θα παραμείνει το τελευταίο. Ο μέσος αριθμός της νέας περιοχής θα είναι ¼ του συνολικού τμήματος, δηλαδή (το τελευταίο στοιχείο + το μέσο στοιχείο του συνόλου του πίνακα) / 2. Και πάλι, εκτελείται η ίδια λειτουργία - σύγκριση με τον μέσο αριθμό της συστοιχίας. Εάν η επιθυμητή τιμή είναι μικρότερη από τον μέσο όρο, απορρίψτε τη δεξιά πλευρά και κάντε την ίδια μέχρι να βρεθεί αυτό το μεσαίο στοιχείο.
Φυσικά, είναι καλύτερο να δούμε ένα παράδειγμα του πώς γράφεται μια δυαδική αναζήτηση. Ο Pascal εδώ είναι κατάλληλος για όλους - η έκδοση δεν είναι σημαντική. Ας γράψουμε ένα απλό πρόγραμμα.
Θα έχει μια σειρά από 1 έως h όνομα"massiv", η μεταβλητή που υποδηλώνει το κάτω όριο αναζήτησης, που ονομάζεται "niz", το ανώτερο όριο που ονομάζεται "verh", το μεσαίο στοιχείο της αναζήτησης είναι "sredn". και ο απαιτούμενος αριθμός είναι "isk".
Έτσι, ορίστε πρώτα τα άνω και τα κάτω όρια του εύρους αναζήτησης:
niz: = 1.
verh: = h + 1;
Στη συνέχεια οργανώνουμε τον κύκλο "ενώ το κάτω μέρος είναι μικρότερο από το ανώτατο όριο":
Ενώ το niz <verh - 1 κάνει
αρχίζει
Σε κάθε βήμα, διαιρέστε το τμήμα κατά 2:
sredn: = (niz + verh) div 2. {χρησιμοποιήστε τη λειτουργία div επειδή διαιρούμε το υπόλοιπο}
Κάθε φορά που κάνουμε μια επιταγή. Εάν ο μέσος όρος είναι ίσος με τον επιθυμητό, διακόπτουμε τον κύκλο, αφού ήδη βρεθεί το επιθυμητό στοιχείο:
αν sredn = isk στη συνέχεια σπάσει?
Αν το μέσο στοιχείο του πίνακα είναι μεγαλύτερο από αυτό που ψάχνουμε, απορρίψτε την αριστερή πλευρά, δηλαδή, εκχωρούμε το μεσαίο στοιχείο στο ανώτερο όριο:
αν massiv [sredn]> isk τότε verh: = sredn;
Και αν το αντίθετο, τότε το κάνουμε το κατώτερο όριο:
αλλιώς niz: = sredn;
τέλος,
Αυτό είναι όλο που θα είναι στο πρόγραμμα.
Θα αναλύσουμε πώς η δυαδική μέθοδος θα εξετάσει στην πράξη. Λαμβάνουμε έναν τέτοιο πίνακα: 1, 3, 5, 7, 10, 12, 18 και αναζητήστε τον αριθμό 12 σε αυτό.
Συνολικά, έχουμε 7 στοιχεία, οπότε ο μέσος όρος θα είναι ο τέταρτος, η αξία του 7.
1 | 3 | 5 | 7 | 10 | 12 | 18 |
Δεδομένου ότι το 12 είναι μεγαλύτερο από 7, τα στοιχεία 1,3 και 5 μπορούν να απορριφθούν. Στη συνέχεια, έχουμε 4 αριθμούς αριστερά, 4/2 χωρίς το υπόλοιπο να είναι 2. Έτσι, το νέο μεσαίο στοιχείο θα είναι 10.
7 | 10 | 12 | 18 |
Εδώ το μέσο στοιχείο είναι ήδη 12, αυτός είναι ο απαιτούμενος αριθμός. Η εργασία έχει ολοκληρωθεί - ο αριθμός 12 βρίσκεται.