PHP简单拼写检查(二进制搜索帮助)

时间:2009-10-07 18:26:59

标签: php

我需要帮助您使用搜索词($ searchTerm)执行二进制搜索并将其与字典($ dictionary)进行比较。

基本上,它将字典文件读入数组。用户输入一些单词,该字符串变为$ checkMe。我做了一个爆炸功能,它变成了$ explosionCheckMe。我将$ checkMe中的每个术语传递给binarySearch作为$ searchTerm(好吧,我的代码令人困惑)。我认为我的逻辑是合理的,但我的语法不是......

我一直在使用它:http://us3.php.net/manual/en/function.strcasecmp.php

这是我的代码:paste2.org/p/457232

2 个答案:

答案 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,这真的很棒。