1.测试内容:
使用多种hash算法将文章标识翻译成整型ID后的冲突数和冲突率的比较。
2.测试方法
1. CRC32:把任意长度的字符串通过散列算法,最终变换成固定长度(int32)的摘要输出
2. Blizzard的Hashstring: 暴雪公司设计的字符串转整型的hash函数,hash值为int32.
3. BKDRHash: 常用的字符串哈希函数,hash值也为int32.
4. MD5 :目前被大量广泛使用的散列算法之一。MD5散列长度通常是128bit
5. MD5 To 32bit:在MD5值的基础上做压缩,转换成32位整型ID。
3.测试数据
所有文章key数 | 去重后的key数 |
4136019 | 4135999 |
4.测试结果
5.结果分析
1.想直接用生成int32的hash函数来翻译文章的key,产生冲突的数会比较多。
2.MD5虽然能保证对文章key不冲突,但生成的值不是整型,不友好。
3.对MD5压缩翻译成整型值(相当于二次hash),可以降低冲突,但性能开销明显增大(看最后一列时间对比)。
6.思考:
对于用纯hash算法完成翻译文章key的方式,冲突理论上肯定存在,我们只能希望尽可
能地减少冲突(410多万数据最多几十次冲突),同时还要考虑性能!
接下来还可以走的路,寻找更大hash值的算法,或者优化组合降低二次hash的性能损
耗。
或者最终另辟蹊径,跳出纯算法的思维,寻找更合适的方法!
哈哈,这是一个开放性问题,本人在这抛砖引玉,积极欢迎技术达人在此多提意见,指正错误!
---------------------
作者:superstar110007
来源:CSDN
原文:https://blog.csdn.net/superstar110007/article/details/43196083
版权声明:本文为博主原创文章,转载请附上博文链接!