【发布时间】:2009-03-24 15:45:53
【问题描述】:
我正在寻找一种散列算法,它产生一个 31/32 位有符号/无符号整数作为 utf8 字符串的摘要,目的是使用输出播种 prng,例如 Park-Miller-Carta LCG 或梅森捻线机。
我研究了 FNV1 和 FNV1a,但它们为最后一个字符不同的相似字符串提供了非常接近的值;我希望有一个低碰撞哈希,它会在对输入字符串的最小修改时发生根本性的变化。性能不是问题。
我目前的方法是使用字符代码和素数作为乘数的脏 LCG:
a = 524287;
for ( i = 0; i < n; i ++ )
a = ( a * string.charCodeAt ( i ) * 16807 + 524287 ) % 2147483647;
如果有更好的选择,请告诉我。
【问题讨论】: