多种hash算法将文章标识翻译成整型ID的冲突率测试

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数
41360194135999

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 
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://my.oschina.net/maliang0130/blog/3066920

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值