前几天google了一些php的hash函数, 想找到一种分布较为均匀的hash算法, 这样对于比如数据库分表或者其他一些需要hash的场景比较有帮助. 然后就发现了这个Another happy memcached user. 很多hash函数采用times 33, 下边是php的实现: function hash_func1($ke
前几天google了一些php的hash函数, 想找到一种分布较为均匀的hash算法, 这样对于比如数据库分表或者其他一些需要hash的场景比较有帮助. 然后就发现了这个Another happy memcached user.
很多hash函数采用times 33, 下边是php的实现:
function hash_func1($key, $n) { $hash = 0; for ($i = 0; $i <p>而上边链接的邮件中提到了一种分布更均匀的算法, 如下:</p> <pre class="brush:php;toolbar:false">function hash_func(&$keyword, $n) { $hash = crc32($keyword) >> 16 & 0x7fff; return $hash % $n; }
为了自己验证下, 我整理了一套cet-4词汇表来做测试. 测试结果如下, 使用time 33
<code>bash$ time php h.php bucket(0): 11.33% bucket(1): 9.61% bucket(2): 10.23% bucket(3): 9.77% bucket(4): 9.85% bucket(5): 9.81% bucket(6): 10.21% bucket(7): 9.50% bucket(8): 9.70% bucket(9): 9.99% real 0m0.026s user 0m0.006s sys 0m0.003s </code>
使用crc32移位的这个,
<code>bash$ time php h.php bucket(0): 10.16% bucket(1): 10.52% bucket(2): 9.72% bucket(3): 9.79% bucket(4): 9.54% bucket(5): 10.34% bucket(6): 9.21% bucket(7): 10.45% bucket(8): 10.12% bucket(9): 10.14% real 0m0.015s user 0m0.003s sys 0m0.002s </code>
从测试结果来看, 使用crc32移位的hash方法要比times 33分布更为均匀一些, 并且效率也要高一些. 测试的php代码和cet4词汇表: 点击这里下载. 感兴趣的可以自己测试一下.
原文地址:PHP: 分布均匀的hash函数, 感谢原作者分享。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

记事本++7.3.1
好用且免费的代码编辑器

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),