难以理解这个双重哈希问题的解决方案

问题描述 投票:0回答:1

我无法理解下面链接中关于双重哈希的第三个问题

http://www.cs.cmu.edu/~cburch/211-fa97/review/q-hash/index.html

问题来了,

在下面,假设我们的 n 的哈希函数是 n % 20,我们的第二个 哈希函数,在适用的情况下,是 (n % 7) + 1.

假设我们使用双重哈希来解决冲突。以一个开头 空哈希表,我们插入以下内容。

8 38 3 5 28 18 65 83

哈希表在最终插入后会怎样?如果我们那么 搜索 48,我们将查看插入的密钥中的多少个?

页面上的解决方案给出了带有答案的哈希表。

Answer:

   +----+
   | :  |
   | :  |
   +----+
 3 |  3 |
   +----+
 4 |    |
   +----+
 5 |  5 |
   +----+
 6 |    |
   +----+
 7 |    |
   +----+
 8 |  8 |
   +----+
 9 | 28 |
   +----+
10 | 83 |
   +----+
11 | 65 |
   +----+
12 |    |
   +----+
13 | 18 |
   +----+
   | :  |
   | :  |
   +----+
18 | 38 |
   +----+
19 |    |
   +----+

但是我不明白 28 的哈希值是如何进入哈希表的第 9 槽的。

根据我的理解,当发生碰撞时,我们使用公式 (h1(n) + i*h2(n)) mod m。由于 8 之前被散列到插槽 8,因此当我们散列 28 时会发生冲突,因为 h1(28) = 8.

为了解决,我们使用上面的公式 (28 % 20) + 1*((28 % 7) + 1) mod 8。这是 (8 + 1) mod 8 = 1。所以我希望 28 散列到 slot 1 之后碰撞,但解决方案说它散列到插槽 9.

我做错了什么?

hash hashtable hash-collision double-hashing
1个回答
0
投票

正如有人指出的那样,当它是表大小时,我混淆了数组大小的 m。一旦你设置 m = 20 一切都有意义。仍然不确定为什么我们知道 m = 20 但谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.