2017-02-16 92 views
1

1月份我失败了算法考试。我明天要去口试。当我有一个我无法理解的答案时,我正在通过普通考试和答案。 Here is the question参加考试的考点

根据答案,答案是A.为什么? 20模7是6,但12模7是5并且是空的。希望你能帮助我。

PS:很抱歉,如果格式是错误的

+0

不要忘记把k乘以2 –

+0

然后(2 * 20 + 3 * 0^2)mod 7是5.而第5个槽是空的 –

+0

这就是其中20在回答a) –

回答

0
h(20,0) = 5 
h(12,0) = 3 
h(5,0) = 3* 
h(5,1) = 6 
h(3,0) = 6* 
h(3,1) = 2 
h(1,0) = 2* 
h(1,1) = 5* 
h(1,2) = 0 

* collision 
1
i k 
------------------------- 
0 20 (2*20+3*0^2) mod 7 = (40 + 0) mod 7 = 40 mod 7 = 5 <- [e, e, e, e, e, 20, e] 
0 12 (2*12+3*0^2) mod 7 = (24 + 0) mod 7 = 24 mod 7 = 3 <- [e, e, e, 12, e, 20, e] 
0  5 (2*5+3*0^2) mod 7 = (10 + 0) mod 7 = 10 mod 7 = 3 <- collision 
1  5 (2*5+3*1^2) mod 7 = (10 + 3) mod 7 = 13 mod 7 = 6 <- [e, e, e, 12, e, 20, 5] 
0  3 (2*3+3*0^2) mod 7 = (6 + 0) mod 7 = 6 mod 7 = 6 <- collision 
1  3 (2*3+3*1^2) mod 7 = (6 + 3) mod 7 = 9 mod 7 = 2 <- [e, e, 3, 12, e, 20, 5] 
0  1 (2*1+3*0^2) mod 7 = (2 + 0) mod 7 = 2 mod 7 = 2 <- collision 
1  1 (2*1+3*1^2) mod 7 = (2 + 3) mod 7 = 5 mod 7 = 5 <- collision 
2  1 (2*1+3*2^2) mod 7 = (2 + 12) mod 7 = 14 mod 7 = 0 <- [1, e, 3, 12, e, 20, 5] 

所以

[1, empty, 3, 12, empty, 20, 5] 
+0

为什么我只有0,1和2,而不是3? –

+0

对于每个数字'k',以'i = 0'开头。对于每次碰撞,你增加'i'并计算二次散列函数,直到找到一个空插槽。在这个特定的问题中,你永远不会到达'i = 3',因为当'i = 2'时你会发现'k = 1'的空插槽。 –

1

这里是如何工作的,每次发生碰撞,二次探测将被使用(用i=1,2,..),直到散列表中存在可用空间:

enter image description here