java - 双重哈希中的重新哈希也会改变主哈希函数吗?

标签 java algorithm hashtable double-hashing

当你在双重哈希中与主哈希函数发生冲突时,你使用辅助哈希函数。 但是如果你也与它发生冲突,那么你必须重新散列,所以你将表大小加倍并选择最接近的素数作为新的表大小。 这也会改变您的主要哈希函数吗?例如,如果您的主要哈希函数是 key mod tableSize 并且您的 tableSize 最初是 11,现在是 23,那么它也会改变吗?因为如果哈希函数保持不变,您仍然会在相同的位置发生冲突。

最佳答案

When you have a collision with the primary hash function in double hashing, you use the secondary hash function. But if you have a collision with that as well, then you have to rehash, so you double the table size and choose the nearest prime number as the new table size.

我不认为这是真的。

在双重哈希中,

 h(k,i) = h1(k) + i*h2(k)

其中 h(k,i) 是为 key 探测的第 (i+1) 个槽。所以你连续增加 i,这样你就碰到了一个空槽。

你需要重新散列,当负载因子超过特定值时,是的,当重新散列时,主散列函数通常会改变,但我认为没有它你也能过得去([编辑:改变主散列函数]),尽管它会降低性能。

关于java - 双重哈希中的重新哈希也会改变主哈希函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20043934/

相关文章:

java - 我应该使用 Java 命名约定吗?

java - 使用 Fragments 进行 Android 搜索

java - 计算中间有强制点的2个节点之间的最短路径

python - 递归程序打印但不返回正确值

algorithm - 确定 Pearson 哈希的完美哈希查找表

java - 如何使用 Selenium 阅读 YouTube 评论?

PHP比较字符串算法

algorithm - 范围最小查询基础知识

c++ - 如何将键但没有值插入 std::unordered_map

hashtable - 当需要2个键时如何使用函数 "table:get"(表扩展)?