加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何选择哈希表的大小?

发布时间:2020-12-16 03:46:43 所属栏目:百科 来源:网络整理
导读:假设我有200.000个单词,并且我将使用hash * 33 word [i]作为哈希函数,应该是用于优化的表的大小,以获得最小的内存/分页问题? 使用平台 – C(c99版), 单词是英文字符,ASCII值 一次初始化哈希表(链表样式的桶), 用于搜索下一个,如字典搜索. 碰撞后,该单词将作
假设我有200.000个单词,并且我将使用hash * 33 word [i]作为哈希函数,应该是用于优化的表的大小,以获得最小的内存/分页问题?

使用平台 – C(c99版),

单词是英文字符,ASCII值

一次初始化哈希表(链表样式的桶),

用于搜索下一个,如字典搜索.

碰撞后,该单词将作为新节点添加到存储桶中.

解决方法

一个好的经验法则是将负载系数保持在75%或更低(有些人会说70%)以维持(非常接近)O(1)查找.假设你有一个很好的哈希函数.

基于此,您需要至少约266,700个桶(75%)或285,700个桶(70%).这假设没有碰撞.

也就是说,您最好的选择是使用各种哈希表大小的一些示例数据运行测试,并查看您获得的冲突数.

你也可以考虑一个比hash * 33 word [i]更好的哈希函数. Jenkins hash及其变体需要更多的计算,但它们提供了更好的分布,因此通常会减少冲突并缩小所需的表大小.

你也可以在这个问题上抛出记忆.表大小为500,000可以为您提供40%的最小加载因子,这可以弥补您的哈希函数的缺点.但是,你很快就会达到收益递减的程度.也就是说,使表格大小为100万,可以给出20%的理论载荷因子,但几乎可以肯定的是,你实际上并没有意识到这一点.

长话短说:使用更好的哈希函数并在不同的表格大小上进行一些测试.

有一个东西,如minimal perfect hash.如果你知道你的输入数据是什么(即,它没有改变),那么你可以创建一个保证O(1)查找的哈希函数.它也非常节省空间.但是,我不知道为200,000个项目创建最小完美哈希是多么困难.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读