2012-10-30 39 views
0

我有一个大小为11的散列表,实现为一个数组。我试图使用双重散列技术;我已经完成了我的大部分数据。我的散列函数如下:双散列给出一个大于表大小的数字

h1 = key mod 11 
h2 = 3*key mod 4 

这使我h(k,i) = k mod 11 + i(k * 3 mod 4)其中i = 0,1,2,3,...

我已经有时隙0,1,4,8,9,和10填写。我试图插入19.这是我的哈希结果19:

1st time: 8 <-- collision 
2nd time: 9 <-- collision 
3rd time: 10 <-- collision 
4th time: 11 <--- well there is no index 11 table ends with index 10 

我该怎么办?

此外,当他们说“让表格有11个插槽”时,这是否意味着散列表有0到10的可用插槽?

+0

你'意味着H(K,I)=键MOD 11 + I *(键* 3 mod 4)时'? – Serge

+0

是的,我们必须使用的功能,如果我们第一次失败。 – printfmyname

+0

好的,如果所有11个插槽已经填满了会怎么样? – Serge

回答

2

这种变化将修复错误的哈希表索引计算:

h(k,i) = (key + i*(key*3 mod 4)) mod 11 
+0

是的,但是对于顺序条目仍然存在问题(使用任何数字11或更大的值将创建顺序模式),并且您没有考虑大部分完整的哈希表。 – Makoto

+0

非常感谢大家。特别是sergo, – printfmyname