首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >散列函数是否应该返回散列的数值或该值% numBuckets?

散列函数是否应该返回散列的数值或该值% numBuckets?
EN

Stack Overflow用户
提问于 2013-02-20 15:13:36
回答 1查看 98关注 0票数 1

我使用下面的散列函数

代码语言:javascript
复制
function hash_djb2($str){
    $hash = 5381;
    $length = strlen($str);

    for($i = 0; $i < $length; $i++) {
        $hash = (($hash << 5) + $hash) + ord(strtolower($str[$i])) - 96;        
    }
    return $hash;
}

我应该返回$hash还是$hash % $numBuckets,其中$numBuckets是哈希表中存储桶的数量?

前者将返回非常大的数字并使散列冲突变得不可能,而后者仅返回介于0和$numBuckets-1之间的值,但使散列冲突成为可能

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-20 15:18:22

hash_djb2() (应该)的输出覆盖了整数值的整个范围,所以如果你正在实现一个哈希链(即有限数量的存储桶),你将需要使用模数来缩短范围。

顺便说一句,只有当您决定只使用函数输出时,散列冲突的风险才会降低;使范围变小显然会增加这种风险。您应该通过允许多个项存储在相同的散列值下来管理该风险。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14974244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档