Nic*_*kis 25
我不确定它是否是最佳选择,但这里是字符串的哈希函数:
编程实践(HASH TABLES,第57页)
/* hash: compute hash value of string */
unsigned int hash(char *str)
{
unsigned int h;
unsigned char *p;
h = 0;
for (p = (unsigned char*)str; *p != '\0'; p++)
h = MULTIPLIER * h + *p;
return h; // or, h % ARRAY_SIZE;
}
Run Code Online (Sandbox Code Playgroud)
根据经验,值31和37已被证明是
ASCII字符串的散列函数中乘数的良好选择.
Nic*_*son 23
如果性能不重要,只需采用安全散列(如MD5或SHA1),并将其输出截断为32位.这将为您提供与随机无法区分的哈希码的分布.
小智 16
对此,我很抱歉.今年早些时候,我创作了一个名为Hashing Short Strings的页面,这可能对本次讨论很有帮助.总之,我发现CRC-32和FNV-1a优于散列短串.在我的测试中,它们是高效的并且产生广泛分布和无碰撞的哈希.当输出被折叠到32位时,我惊讶地发现MD5,SHA-1和SHA-3产生了少量的冲突.
| 归档时间: |
|
| 查看次数: |
44742 次 |
| 最近记录: |