Ο αλγόριθμος δυαδικής αναζήτησης είναι μια αποτελεσματική μέθοδος για την εύρεση μιας συγκεκριμένης τιμής σε έναν ταξινομημένο πίνακα. Αυτή η προσέγγιση χωρίζει τον πίνακα σε μικρότερα μέρη και συγκρίνει συνεχώς την τιμή στη μεσαία θέση του εύρους αναζήτησης με την τιμή στόχο. Εάν οι τιμές ταιριάζουν, βρίσκεται η επιθυμητή τιμή. Διαφορετικά, ο αλγόριθμος συνεχίζει να περιορίζει το εύρος αναζήτησης και επαναλαμβάνει τη διαδικασία μέχρι να βρεθεί η τιμή ή να μείνουν άλλα στοιχεία προς εξέταση.
Βήματα:
- Αρχικοποίηση του εύρους αναζήτησης: Ξεκινήστε επιλέγοντας το εύρος αναζήτησης από την πρώτη θέση
left
έως την τελευταία θέσηright
του πίνακα. - Βρείτε το μεσαίο σημείο: Υπολογίστε το μεσαίο σημείο υπολογίζοντας τον μέσο όρο
left
των θέσεων και δεξιά. αυτό είναι το μεσαίο σημείο του εύρους αναζήτησης. - Σύγκριση τιμών: Συγκρίνετε την τιμή στο μεσαίο σημείο με την τιμή στόχο.
- Αποτέλεσμα σύγκρισης χειρισμού: Εάν η τιμή στο μεσαίο σημείο ταιριάζει με την τιμή στόχο, επιστρέψτε αυτήν τη θέση. Εάν η τιμή στο μεσαίο σημείο είναι μικρότερη από την τιμή στόχο, ενημερώστε την αριστερή θέση σε μέση + 1 για αναζήτηση στο δεξί μισό. Εάν η τιμή στο μεσαίο σημείο είναι μεγαλύτερη από την τιμή στόχο, ενημερώστε τη δεξιά θέση στη μέση- 1 για αναζήτηση στο αριστερό μισό.
- Επανάληψη: Επαναλάβετε τα βήματα 2 έως 4 μέχρι να βρεθεί η τιμή ή να μην υπάρχουν άλλα στοιχεία για έλεγχο
left > right
.
Πλεονεκτήματα και μειονεκτήματα
Πλεονεκτήματα:
- Αποτελεσματική απόδοση: Η χρονική πολυπλοκότητα του αλγορίθμου είναι O(log n), καθιστώντας τον εξαιρετικά αποδοτικό για το χειρισμό μεγάλων συνόλων δεδομένων.
- Αποτελεσματικό για μεγάλα σύνολα δεδομένων: Η δυαδική αναζήτηση είναι αποτελεσματική στη μείωση του αριθμού των στοιχείων που εξετάζονται γρήγορα για μεγάλα σύνολα δεδομένων.
Μειονεκτήματα:
- Ισχύει μόνο για ταξινομημένους πίνακες: Ο αλγόριθμος λειτουργεί μόνο σε ταξινομημένους πίνακες.
- Μεταβλητός αριθμός βημάτων: Ο αριθμός των βημάτων που απαιτούνται για την εύρεση της τιμής εξαρτάται από τη θέση της στον πίνακα και μπορεί να κάνει πολλά βήματα για τιμές κοντά στα άκρα.
Παράδειγμα: Δυαδική αναζήτηση για εύρεση της τιμής 12 σε ταξινομημένο πίνακα στην PHP
function binarySearch($arr, $target) {
$left = 0;
$right = count($arr)- 1;
while($left <= $right) {
$mid = floor(($left + $right) / 2);
if($arr[$mid] == $target) {
return $mid; // Return the position of the value
} elseif($arr[$mid] < $target) {
$left = $mid + 1;
} else {
$right = $mid- 1;
}
}
return -1; // Value not found
}
$array = [2, 5, 8, 12, 15, 20, 30];
$targetValue = 12;
$result = binarySearch($array, $targetValue);
if($result != -1) {
echo "Value $targetValue found at position $result.";
} else {
echo "Value $targetValue not found in the array.";
}
Επεξήγηση του Παραδείγματος
- Ξεκινάμε με το αρχικό εύρος αναζήτησης από την πρώτη θέση
left = 0
μέχρι την τελευταία θέσηright = 6
του πίνακα. - Υπολογίζουμε το μεσαίο σημείο(μέση) υπολογίζοντας τον μέσο όρο της αριστερής και της δεξιάς θέσης.
mid = 3
. Η τιμή στα μέσα είναι 12. - Συγκρίνουμε την τιμή στο
mid(12
) με την τιμή στόχο(12) και βρίσκουμε ένα ταίριασμα, οπότε επιστρέφουμε τη θέση 3. - Ο αλγόριθμος τελειώνει και βγάζουμε το αποτέλεσμα "Τιμή 12 που βρέθηκε στη θέση 3."