我无法理解下面链接中关于双重哈希的第三个问题
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.
我做错了什么?
正如有人指出的那样,当它是表大小时,我混淆了数组大小的 m。一旦你设置 m = 20 一切都有意义。仍然不确定为什么我们知道 m = 20 但谢谢。