Я столкнулся с этим простым классом PHP на GitHub при поиске Bloom Filters, это было названо как «Bloom Filter», но я думаю, что это скорее «хэш-таблица», так как мне любопытно, это очень просто понять.PHP Hash Key Array
Он читает в файле слов и создает хэш-массив для каждого слова, затем вы можете проверить, существует ли слово в массиве хешей.
Мне любопытно, есть ли какое-либо преимущество использования этого или просто хранить фактическое слово в виде ключа или значения массива, а затем проверять, существует ли это слово в массиве, теоретически это просто добавляет накладные расходы и делает то же самое вещь, пожалуйста, помогите мне понять, что мне не хватает?
<?php
class Dictionary {
private $words;
private $wordsHash;
public $hashLength;
public function __construct($filepath, $hashLength) {
$this->words = file($filepath);
$this->hashLength = $hashLength;
foreach($this->words as $word){
$this->wordsHash[$this->createHash($word)] = true;
}
echo 'words: ' . count($this->words) . ' hashes: ' . count($this->wordsHash) . "\n";
}
public function createHash($str){
$hash = substr(md5(trim($str)), 0, $this->hashLength);
return $hash;
}
public function checkDictionary($str){
$hash = $this->createHash(trim($str));
if(array_key_exists ($hash , $this->wordsHash)){
return true;
}
return false;
}
}
?>
dictionary.txt файл имеет 10000 слов в нем, я просто покажу несколько для демо
der
die
und
in
den
von
zu
das
mit
sich
des
auf
für
ist
Пример использования:
<?php
$dictionary = new Dictionary('dictionary.txt', 30);
if($dictionary->checkDictionary('den')){
echo 'The Word den Exist in the Hash Table';
}else{
echo 'The Word den DOES NOT Exist in the Hash Table';
}
?>
Мне кажется, что вы могли бы просто сделать это с помощью обычных php-массивов, которые действуют как хэши – hackartist
@hackartist: То, что я думал, но я подумал, что должна быть причина, по которой кто-то столкнулся с проблемой сделать это? – JasonDavis