Park-Miller-Carta LCG や Mersenne-ツイスター。
FNV1 と FNV1a を調査しましたが、最後の文字が異なる同様の文字列に対して非常に近い値を提供します。入力文字列の最小限の変更で根本的に変化する、衝突の少ないハッシュが必要です。パフォーマンスは問題ではありません。
私の現在のアプローチは、文字コードと素数を乗数として使用するダーティ LCG で構成されています。
a = 524287;
for ( i = 0; i < n; i ++ )
a = ( a * string.charCodeAt ( i ) * 16807 + 524287 ) % 2147483647;
より良い代替案があれば教えてください。