我需要帮助您使用搜索词($ searchTerm)执行二进制搜索并将其与字典($ dictionary)进行比较。
基本上,它将字典文件读入数组。用户输入一些单词,该字符串变为$ checkMe。我做了一个爆炸功能,它变成了$ explosionCheckMe。我将$ checkMe中的每个术语传递给binarySearch作为$ searchTerm(好吧,我的代码令人困惑)。我认为我的逻辑是合理的,但我的语法不是......
我一直在使用它:http://us3.php.net/manual/en/function.strcasecmp.php
这是我的代码:paste2.org/p/457232
答案 0 :(得分:1)
我知道这不会直接回答您的问题,但您是否考虑过使用pspell和自定义词典?
答案 1 :(得分:0)
所以你正在查找字典中的确切字符串。你为什么不用这个简单的数组呢?本机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
。见wikipedia article on binary search,这真的很棒。