• 1000 Мой ручной расчет:
Результат по коду:
в результате ручное изображение, которое вы можете реализовать между прокаткой га sh с «udi» и «dip» (пример) - это 6538 и 5740, но в результате код 5852 и 35927, что не одно и то же. В ha sh с "bud" тот же результат, что и мой код, который работает для вычисления ha sh
rollha sh code:
$text = $text;
$hash_value = 0;
$prev_hash = 0;
$basis = 7;
$ascii = 0;
$kgram = 3;
$c_awal;
$c_akhir;
$prime = 100007;
for($j=0; $j <= (strlen($text)-$kgram); $j++){
$charArray[$j] = substr($text, $j, $kgram);
}
// hashing
for($i = 0; $i < $kgram; $i++){
$ascii = ord($charArray[$i] );
$hash_value = $hash_value + $ascii * pow($basis, $kgram - ($i+1));
}
// rolling hash
$hash_value = $hash_value % $prime;
$hash[0] = $hash_value;
$prev_hash = $hash_value;
for($k = 1; $k < count($charArray);$k++){ //count array data
$c_awal = substr($charArray[$k+1], 0.1);
$c_awal = ord($c_awal);
$c_akhir = substr($charArray[$k], -1); //i
$hash_value = (($prev_hash + $prime) - $c_awal * pow($basis, $kgram - $k)
% $prime) % $prime;
$hash_value = ($hash_value * $basis + ord($c_akhir)) % $prime;
$prev_hash = $hash_value;
$hash[$k] = $hash_value;
}
return $hash;
в rollha sh code Я пытаюсь реализовать алгоритм веяния (из рисунка ручного расчета вы можете видеть), но почему мой результат отличается от результата, который я рассчитал вручную? в чем тут проблема и как это исправить? Заранее спасибо