用于解决散列冲突的二次探测方法 H(k)= h(k)+ c1 * i ^ 2 + c2 * i。
我需要一些帮助来弄清楚如何决定c1&的值。 c2是如何确保访问哈希表的所有插槽的。
答案 0 :(得分:0)
设ht_size =哈希表槽的数量。我猜你的意思是
h(k) + c1*i^2 + c2*i % ht_size
c1 = 0且c2 = 1将起作用;)
c1 = 0且c2共同素数到ht_size也有效。 1是任何数字的共同素数。如果ht_size不是意外相同的素数,素数也是很好的候选者。
为什么这样的设置会访问所有插槽?
如果c1 = 0且c2与ht_size互质,那么ggt(c2,ht_size)== 1。
换句话说,在组(代数群论)中,c2是一个生成器。
这意味着c2**i
将生成从0到ht_size - 1的所有数字。
到**
我的意思是幂运算符,即应用组的运算符i次。该组的运算符为+
,因此组理论符号中的c2**i
对应于正常表示法中的c2*i
。
我希望这能让你知道如何开始搜索c1和c2的组合,其中c1!= 0。