如何使用散列名称搜索匹配的矢量?

时间:2014-04-17 17:30:23

标签: c++ regex algorithm vector hash

所以我的教授为我们分配了这个项目。它非常简单,因为它是我们的第一个哈希程序。该程序将15个名称作为输入并散列它们并存储在某些东西中。我在矢量中做到了。现在,一旦它们被散列,用户输入另一个名称,它将散列该名称并尝试将其与向量中的一个匹配。也许是我,也许是他写这个问题的方式,但我有点困惑。我们的计划假设有碰撞保护。这意味着我们在输入的名称上运行算法,它将吐出一个数字,该数字是我们将名称存储在向量中的位置。如果该位置已有另一个名称,我们可以将其存储在下一个可用位置。

让我们说我输入名字jordan和jon。该算法将告诉我将它们存储在同一个位置(比如现场8)但是碰撞保护会识别出jordan已经占据了现场(8)并且它会将jon移动到下一个可用位置(比如现场9) 。现在,当用户输入名称以查看它是否已经在向量中并且他进入jon时,算法将看到它应该在现场8中。你认为我应该检查该点是否为空,如果不是在现场8中找到了匹配,即使现场8中的名字是jordan并且输入的名称是jon。或者我应该从第8点开始,看看字符串是否匹配,如果他们不检查下一个点,依此类推,直到我回到原点或找到匹配?

我编写了程序并且工作正常,我只是遇到了这个困境,无法完成程序。感谢

2 个答案:

答案 0 :(得分:2)

您的方法是Open Addressing碰撞处理。

根据这种方法,当你搜索一个元素时,你应该“继续”,直到你找到第一个空位 - 只有这样才能保证你所请求的元素不被存储。

答案 1 :(得分:1)

查找值时会发生三件事。

  1. 您可以找到您正在寻找的价值。
  2. 您在哈希表中找到一个空位。
  3. 您在指定的地点找到了其他值。
  4. 在案例1和案例2中,您应该清楚自己应该做些什么。您肯定知道您要查找的价值是在您的表格中,还是在您的表格中。在第三种情况下,您应该遵循在向表中添加项目时执行的相同过程。也就是说,继续查看下一个位置,直到达到上述条件1或2。