1
查找字符串以整数散列函数的值在mysql bigint unsigned
数据类型(0 <= n <= 18446744073709551615
)范围内。将md5/sha1转换为基数为16的整数不符合此要求。128位整数散列函数
查找字符串以整数散列函数的值在mysql bigint unsigned
数据类型(0 <= n <= 18446744073709551615
)范围内。将md5/sha1转换为基数为16的整数不符合此要求。128位整数散列函数
Java应用rolling hash应该为你
工作从java.lang.String
:
public int hashCode() {
int h = hash;
if (h == 0 && count > 0) {
int off = offset;
char val[] = value;
int len = count;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
的想法是计算哈希为:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
为了应对溢出,你可以添加一个步骤,在该步骤中对照18446744073709551615
检查哈希,如果它更大,则采用哈希的mod
和18446744073709551615
。
你的散列函数需要什么样的属性?它应该是密码吗?它需要快速吗?我希望它需要在程序的不同执行过程中保持一致。 – user2357112
@ user2357112没有加密。该值将用作字符串的整数键值。低碰撞要求是必须的。 –
实质上你需要一个64位散列。维基百科有一些被列为64位的加密和非加密,包括RIPEMD-64,Siphash,elf64等。为什么这样一个有限的散列大小呢? –