我正在学习 Double Hash,但我很难理解它是如何工作的。我做了一个例子,但我不知道它是对还是错。如果有人可以帮助我,那就太好了。这是输入:
米 = 13
k = { 5, 14, 29, 25, 17, 21, 18, 32, 20, 9, 15, 27 }
h1(k) = k mod 13
h2(k) = 1 + (k mod 11)
我正在学习 Double Hash,但我很难理解它是如何工作的。我做了一个例子,但我不知道它是对还是错。如果有人可以帮助我,那就太好了。这是输入:
米 = 13
k = { 5, 14, 29, 25, 17, 21, 18, 32, 20, 9, 15, 27 }
h1(k) = k mod 13
h2(k) = 1 + (k mod 11)
只要m
是素数,它就会起作用。
否则h2(x)
可能会评估为 的非相对素数,m
这可能会使算法在仍有空间容纳更多项目时失败。
例如:
m = 36
h1(x) = 1
h2(x) = 30
table[1]
, table[31]
, table[19]
, table[13]
,table[7]
都用过;然后将table[1]
再次检查下一个插槽。如果h2(x)
与 互质m
,则循环将始终在返回起点之前访问所有槽。如果m
是素数,则所有数字都是互素的。