Итак, вы ищете точные строки в словаре. Почему бы вам не простой массив для этого? Хеш-таблица нативного PHP определенно будет быстрее, чем бинарный поиск, реализованный в PHP.
while (!feof($file)) {
$dictionary[strtolower(fgets($file))] = 1;
}
...
function search($searchTerm, $dictionary) {
if ($dictionary[strtolower($searchTerm)]) {
// do something
}
}
Но если вы действительно хотите использовать бинарный поиск, попробуйте это:
function binarySearch($searchTerm, $dictionary) {
$minVal = 0;
$maxVal = count($dictionary);
while ($minVal < $maxVal) {
$guess = intval($minVal + ($maxVal - $minVal) / 2);
$result = strcasecmp($dictionary[$guess], $searchTerm);
if ($result == 0) {
echo "FOUND";
return;
}
elseif ($result < 0) {
$minVal = $guess + 1;
}
else {
$maxVal = $guess;
}
}
}
Основная проблема заключалась в том, что вы не можете установить $maxval
на $guess - 1
. Смотрите статью в Википедии о бинарном поиске , это действительно хорошо.