HashMaps - 不清楚哈希函数和双重哈希

时间:2016-03-07 01:05:31

标签: java hash hashmap hashtable double-hashing

我被要求使用数组实现哈希映射。我需要插入以下键:

15, 7, 26, 39, 11, 9, 27, 5, 18, 2, 54, 22, 4

使用散列函数进入大小为19的数组:

(3x + 7) % 19

使用线性探测,我希望得到以下数组(如果我错了,请纠正我):

Index:    0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   15   16   17   18
Key:      4         11   5    18                       7    26   39   27   2    15   9    22   54

其中26与索引9处的7发生冲突,因此在索引10处插入,然后39在索引10处与26发生冲突,因此在索引11处插入。

我现在尝试使用双散列而不是线性探测在HashMap的数组实现中插入相同的元素。我给出的第二个哈希函数是:

11 - (x % 11)

我有两个问题:

这是否意味着我的阵列大小为11或仍为19?

我最初是否使用原始哈希函数,如果给定索引是空闲的,请在那里插入元素,否则如果存在冲突,请使用第二个哈希函数并在那里插入元素?

1 个答案:

答案 0 :(得分:0)

根据Wikipedia,二次散列函数间接用于探测函数:

h(0, x) = (3x + 7) % 19
h(j, x) =  ((3x + 7) + j(11 - (x % 11))) % 19

其中j是碰撞计数器。