PHP Basit Yazım Denetleyicisi (İkili Arama yardım)

2 Cevap

Bir arama terimi ($ searchTerm) ile bir ikili arama gerçekleştirmek ve bir sözlük ($ sözlük) karşılaştırarak yardıma ihtiyacım var.

Temelde, bir diziye bir sözlük dosyasını okur. Kullanıcı o string $ checkMe olur, bazı kelimeler girer. Ben bir fonksiyonu patlayabilir yok ve $ explodedCheckMe dönüşür. Ben (Tamam, benim kod kafa) $ SEARCHTERM olarak BinarySearch dolar checkMe her dönem geçer. Benim mantık ses olduğunu düşünüyorum, ama benim sözdizimi değil ...

Ben bu bir sürü kullanarak oldum: http://us3.php.net/manual/en/function.strcasecmp.php

İşte benim kod: paste2.org/p/457232

2 Cevap

Yani sözlükte tam dizeleri kadar arıyoruz. Neden bu basit bir dizi değil mi? Yerli PHP'nin karma tablo kesinlikle PHP uygulanan ikili arama daha hızlı olacak.

while (!feof($file)) {
    $dictionary[strtolower(fgets($file))] = 1;
}

...

function search($searchTerm, $dictionary) {
    if ($dictionary[strtolower($searchTerm)]) {
        // do something
    }
}

Eğer gerçekten bir ikili arama kullanmak istiyorsanız, bu deneyin:

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;
        }
    }
}

Asıl sorun, $maxval $guess - 1 ayarlanmış edemez oldu. wikipedia article on binary search, gerçekten iyi bakın.

Ben bu doğrudan cevap vermez biliyorum ama pspell ve özel bir sözlüğü kullanarak kabul var?