散列函数和散列表

时间:2013-12-21 04:39:37

标签: java arrays hash

  

假设我们有一组键:< 54,18,10,25,28,36,38,41,12,   90取代。使用散列函数键%N 将每个键映射到   以下数组。如果发生碰撞,请使用单独的链接   技术

下面只是数组的图形,标有A的数组,大小为13,因此图片是0-12列出的数组单元格。 N = 13。

到目前为止,我对此问题的哈希理解是我需要使用函数key % 13(N等于13)来排列给定数组的键。但是我的书没有提供不同功能的例子。它使用的唯一例子是字母顺序排列,带有姓氏的第一个字母。

有人能给我一个简短的解释,而不是给我答案吗?

2 个答案:

答案 0 :(得分:2)

正如您所提到的,您的哈希函数是h = key%13;

假设存储位置从地址0到20开始。 因此,对数组中的每个元素应用此函数。 1)h1 = 54%13 = 2 =>这将转到第二个地址位置。

2)h2 = 18%13 = 5 =>这将是第五个位置。

3)h3 = 10%13 = 10 =>这将是第10个位置。

4)h4 = 25%13 = 14 =>这将是第14个位置。

5)h5 = 28%13 = 2 =>这里碰撞发生了,因为第二个位置已经有54个。

现在解决方案是使用单独链接。

单独链接意味着只需将此当前元素添加到第二个位置的链接列表中的下一个位置。意味着当碰撞时,每个位置都会有一个新的链表。

以下是图片前。单独链接。enter image description here

希望你得到一个答案。在上图中,元素不同但它的作用相同。

有关详情,请访问以下链接:enter link description here

答案 1 :(得分:1)

您似乎理解了将值插入哈希的一般过程。您需要做的就是将您的教科书示例与您的家庭作业问题联系起来。

  1. 根据散列函数确定需要将值放入哪个存储桶。在教科书示例中,散列函数采用姓氏的第一个字母。在您的作业中,散列函数为N%13。
  2. 解决所有碰撞并执行实际插入。您没有提及教科书示例用作冲突解决策略的内容,但您的任务要求您使用单独的链接。