Η δυαδική αναζήτηση είναι ένας γρήγορος τρόπος να βρεις έναν στόχο σε μια ταξινομημένη λίστα. Ελέγχεις το μεσαίο στοιχείο, αποκλείεις το μισό από τις υπόλοιπες τιμές και επαναλαμβάνεις. Αν η λίστα δεν είναι ταξινομημένη, αυτή η λογική δεν ισχύει.
Σε μια αύξουσα λίστα, ο κανόνας είναι απλός: αν η μεσαία τιμή είναι μικρότερη από τον στόχο, ψάχνεις δεξιά· αν είναι μεγαλύτερη, ψάχνεις αριστερά. Επειδή το εύρος μικραίνει κάθε φορά περίπου στο μισό, η δυαδική αναζήτηση εκτελείται σε χρόνο .
Πώς λειτουργεί η δυαδική αναζήτηση σε μια ταξινομημένη λίστα
Χρησιμοποίησε την παρακάτω ταξινομημένη λίστα:
Έστω ότι ο στόχος είναι το .
Ξεκινάς με όλο το εύρος. Η μεσαία τιμή είναι το . Εφόσον , όλα όσα βρίσκονται αριστερά του μπορούν να απορριφθούν, οπότε η αναζήτηση συνεχίζεται στο
Τώρα η μεσαία τιμή είναι το . Εφόσον , όλα όσα βρίσκονται δεξιά του μπορούν να απορριφθούν, οπότε το εύρος γίνεται
Τώρα η μεσαία τιμή είναι το , άρα η αναζήτηση σταματά. Η χρήσιμη ιδέα δεν είναι μόνο ότι βρέθηκε ο στόχος. Σε δύο συγκρίσεις, το υποψήφιο εύρος έπεσε από τιμές σε .
Γιατί η δυαδική αναζήτηση είναι
Κάθε σύγκριση αποκλείει περίπου τους μισούς από τους υποψήφιους που απομένουν. Μετά από ένα βήμα, απομένουν περίπου στοιχεία. Μετά από δύο βήματα, απομένουν περίπου . Μετά από βήματα, το μέγεθος που απομένει είναι περίπου
Η αναζήτηση ολοκληρώνεται όταν αυτή η ποσότητα γίνει περίπου , άρα ο αριθμός των βημάτων ικανοποιεί τη σχέση
Παίρνοντας και στα δύο μέρη, προκύπτει
Γι’ αυτό η δυαδική αναζήτηση κλιμακώνεται καλά. Μια γραμμική αναζήτηση μπορεί να χρειαστεί έως και ελέγχους, αλλά η δυαδική αναζήτηση χρειάζεται μόνο τόσους ελέγχους όσους απαιτούνται για να υποδιπλασιάζεται συνεχώς το εύρος.
Παράδειγμα κώδικα δυαδικής αναζήτησης
Ακολουθεί μια τυπική επαναληπτική έκδοση σε Python:
Χρειάζεσαι βοήθεια με μια άσκηση;
Ανέβασε την ερώτησή σου και πάρε επαληθευμένη λύση βήμα-βήμα σε δευτερόλεπτα.
Άνοιξε το GPAI Solver →