hashtable - 关于哈希表的几个问题

标签 hashtable hash hashcode hash-collision

我已经阅读了很多关于哈希表以及如何在 C 中实现的内容,我想我脑子里几乎已经有了所有的概念,所以我可以开始自己编写代码了,我只是有几个问题还没有解决正确理解。

作为引用,我一直在阅读:
http://eternallyconfuzzled.com/jsw_home.aspx

1) 正如我在上面的站点上所读到的,建议哈希表大小使用 2 的幂或质数。这基本上是一个数组,并且数组具有固定大小,因此我可以快速查找我正在寻找的值。如果我有一个大输入,我不能声明一个小数组,因为它不适合,如果我的输入数据不是那么大,我不能声明一个非常大的数组,因为它浪费了内存。

哈希表的最佳大小是多少?我的决定应该基于什么?

2) 另外,在那个站点上,有几个散列函数我还没有全部读完。它还指出,最好使用众所周知的算法并推出我自己的算法。我可能会这样做,我会从该站点中选择一个并在我的代码上对其进行测试,看看它是否可以根据我的输入数据最大限度地减少冲突。

困扰我的是我如何控制哈希范围?散列不能返回大于散列表大小的整数,否则我们会遇到严重的问题。我该如何处理?

最佳答案

1) 你指的是载客率哈希表的 - 预期填充的桶的百分比。维基百科是这么说的:

With a good hash function, the average lookup cost is nearly constant as the load factor increases from 0 up to 0.7 or so. Beyond that point, the probability of collisions and the cost of handling them increases.



我相信 Java 实现(可能还有其他实现)会定期调整大小以将负载因子保持在可接受的范围内。

2)只需使用模运算符(%)来保持桶索引合法。第二个运算符应该是存储桶数组的大小。

关于hashtable - 关于哈希表的几个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2304200/

相关文章:

python - 用于无视排序的项目集合的哈希函数

C# 哈希码返回值

java - 哈希表的数组链表数组

data-structures - 如何实现动态大小的哈希表?

android - Facebook SDK 无效哈希键

md5 - 散列函数保证唯一?

java - 哈希表使用的哈希?

java - 将哈希表转换为表格结构

java - 在 this.object 为 null 的 Java 中重写 equals 和 hashcode

java - 如何在java中使用MessageDigest类?