您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用乘法的哈希函数有什么缺点

使用乘法的哈希函数有什么缺点

除法与需要主要表大小的哈希表算法结合使用- 例如,当您无论如何都需要通过表大小来划分键或哈希(即哈希)以获取索引时,使用双哈希或QHash进行开放式寻址。

当表的大小为2的幂时,乘法方法是合适的,然后可以通过按位AND运算来从哈希中获取索引,因此,通过键进行乘法哈希计算,使用键计算表索引的整个路径非常快。您可以通过在Github上搜索魔术常数2654435769来探索一些实际的实现。

最近有使用MurmurHash3雪崩过程而不是乘法方法的趋势:

int hash = key;
hash ^= (hash >> 16);
hash *= 0x85ebca6b;
hash ^= (hash >> 13);
hash *= 0xc2b2ae35;
hash ^= (hash >> 16);
// see this code and the version for 64 bits here:
// https://smhasher.googlecode.com/svn/trunk/MurmurHash3.cpp

因为它速度稍慢,但被认为对不良的密钥分发更可靠。这就是为什么您可能会错误(或正确?)的印象,即很少使用不公平的乘法方法

其他 2022/1/1 18:18:00 有563人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶