哈希表和处理碰撞

时间:2011-05-23 10:57:31

标签: hashtable

假设散列表表示为大小为7的数组。我们希望存储由三位数组成的字符串。主散列密钥是第二数字模7的数值。辅助散列密钥是增加1的第三数模4的数值。将以下字符串插入最初为空的哈希表:“111”,“222”,“737”,“323”和“234”。

我的回答:

  • 0 - 234
  • 1 - 111
  • 2 - 222
  • 3 - 737
  • 4 - 323
  • 5 -
  • 6 -

  • 111; 1 mod 7 = 1

  • 222; 2 mod 7 = 2
  • 737; 3 mod 7 = 3
  • 323; 3 mod 4 + 1 = 4
  • 234; 4 mod 4 + 1 = 4(0)

是正确的吗?

2 个答案:

答案 0 :(得分:2)

您可能想提一下您正在使用的哈希类型。我从你的描述中假设它是cuckoo hashing。如果是这种情况,您可以在最后一次插入之前完成。在插入234之前,您有:

0:
1: 111
2: 222
3: 737
4: 323
5:
6:

尝试使用h1插入234会产生3 mod 7 = 3的密钥,但是3已经包含373.继续h2,我们得到4 mod 4 + 1 = 1但是1已经包含111。此时不再有哈希函数,因此我们在1处插入234并重新执行111。

0:
1: 234
2: 222
3: 737
4: 323
5:
6:

哈希111与h1再次给出1,h2给出1 mod 4 + 1 = 2,但是2已经包含222,所以我们将111存储在2并重新搜索222等等。在这种情况下,最终你会发现所有的钥匙都适合。如果它们的条目并非全部适合(即重新插入进入无限循环),则需要调整表的大小并使用新的散列函数重新散列。

答案 1 :(得分:0)

如果在检查辅助哈希键后仍然存在冲突,我不确定这个问题是什么要求你做的,但我认为它是这样的:

  • 111:1 mod 7 = 1
  • 222:2 mod 7 = 2
  • 737:3 mod 7 = 3
  • 323:2 mod 7 = 2 =>碰撞:3 mod 4 + 1 = 3 + 1 = 4
  • 234:3 mod 7 = 3 =>碰撞:4 mod 4 + 1 = 0 + 1 = 1 =>碰撞

如果在第二次碰撞后前进一个,结果将是

  • 0 -
  • 1 - 111
  • 2 - 222
  • 3 - 737
  • 4 - 323
  • 5 - 234
  • 6 -
  • 7 -