/ / / Η δυαδική αναζήτηση είναι ένας από τους ευκολότερους τρόπους εύρεσης ενός στοιχείου σε έναν πίνακα

Η δυαδική αναζήτηση είναι ένας από τους ευκολότερους τρόπους εύρεσης ενός στοιχείου σε έναν πίνακα

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

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

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

Итак, в чем же заключается принцип работы данного μέθοδος? Αξίζει να πούμε αμέσως ότι η δυαδική αναζήτηση δεν λειτουργεί σε κανένα πίνακα, αλλά μόνο σε ένα ταξινομημένο σύνολο αριθμών. Σε κάθε επόμενο βήμα, λαμβάνεται το μεσαίο στοιχείο του πίνακα (που σημαίνει τον αριθμό του στοιχείου). Εάν ο επιθυμητός αριθμός είναι μεγαλύτερος από τον μέσο όρο, τότε όλα όσα βρίσκονται στα αριστερά, δηλαδή λιγότερο από το μεσαίο στοιχείο, μπορούν να απορριφθούν και να μην αναζητηθούν εκεί. Αντίθετα, εάν είναι μικρότερο από το μέσο όρο - μεταξύ αυτών των αριθμών στα δεξιά, δεν μπορείτε να πραγματοποιήσετε αναζήτηση. Στη συνέχεια, επιλέγουμε μια νέα περιοχή αναζήτησης, όπου το πρώτο στοιχείο θα είναι το μεσαίο στοιχείο ολόκληρου του πίνακα και το τελευταίο θα παραμείνει το τελευταίο. Ο μέσος αριθμός της νέας περιοχής θα είναι ¼ ολόκληρου του τμήματος, δηλαδή (το τελευταίο στοιχείο + το μεσαίο στοιχείο ολόκληρου του πίνακα) / 2. Και πάλι εκτελείται η ίδια λειτουργία - σύγκριση με τον μέσο αριθμό του πίνακα. Εάν η επιθυμητή τιμή είναι μικρότερη από τον μέσο όρο, απορρίπτουμε τη δεξιά πλευρά και το κάνουμε επίσης μέχρι να βρεθεί αυτό το μεσαίο στοιχείο.

δυαδική αναζήτηση pascal

Φυσικά, είναι καλύτερο να δούμε ένα παράδειγμα για το πώς γράφεται η δυαδική αναζήτηση. Οποιοσδήποτε Pascal θα κάνει εδώ - η έκδοση δεν είναι σημαντική. Ας γράψουμε ένα απλό πρόγραμμα.

Θα περιέχει έναν πίνακα από το 1 έως το h που ονομάζεται"massiv", μεταβλητή που δηλώνει το κάτω όριο της αναζήτησης με το όνομα "niz", το άνω φράγμα με το όνομα "verh", ο μεσαίος όρος αναζήτησης με το όνομα "sredn". και ο απαιτούμενος αριθμός είναι "isk".

Έτσι, πρώτα εκχωρούμε τα άνω και κάτω όρια του διαστήματος αναζήτησης:

niz: = 1;
verh: = h + 1;

Στη συνέχεια οργανώνουμε τον κύκλο "ενώ το κατώτερο είναι μικρότερο από το ανώτερο όριο":

Ενώ niz <verh - 1 κάνω
αρχίσει

Σε κάθε βήμα, διαιρούμε το τμήμα με 2:

sredn: = (niz + verh) div 2; {χρησιμοποιήστε τη συνάρτηση div επειδή διαιρούμε χωρίς υπόλοιπο}

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

іf sredn = isk τότε σπάσε.

Εάν το μεσαίο στοιχείο του πίνακα είναι μεγαλύτερο από το επιθυμητό, ​​απορρίψτε την αριστερή πλευρά, δηλαδή αντιστοιχίστε το μεσαίο στοιχείο ως το επάνω περίγραμμα:

αν massiv [sredn]> isk τότε verh: = sredn;

Και αν το αντίθετο, τότε το κάνουμε το κατώτερο όριο:

αλλιώς νιζ: = sredn;
τέλος;

Αυτό είναι το μόνο που θα υπάρχει στο πρόγραμμα.

Ας δούμε πώς θα μοιάζει στην πράξη η δυαδική μέθοδος. Ας πάρουμε έναν πίνακα όπως αυτός: 1, 3, 5, 7, 10, 12, 18 και αναζητήστε τον αριθμό 12 σε αυτόν.

Συνολικά, έχουμε 7 στοιχεία, οπότε το μεσαίο θα είναι το τέταρτο, η τιμή του είναι 7.

1357101218

Επειδή το 12 είναι μεγαλύτερο από το 7, μπορούμε να απορρίψουμε τα στοιχεία 1,3 και 5. Τότε μας απομένουν 4 αριθμοί, τα 4/2 χωρίς υπόλοιπο είναι 2. Άρα, το νέο μεσαίο στοιχείο θα είναι 10.

7101218

δυαδική αναζήτηση pascal
Επειδή το 12 είναι μεγαλύτερο από το 10, απορρίπτουμε το 7. Απομένουν μόνο 10, 12 και 18.

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

Αρέσει:
0
Δημοφιλή μηνύματα
Πνευματική Ανάπτυξη
Φαγητό
yup