为了消除一次聚集,我们使用一种新的方法:平方探测法。顾名思义就是冲突函数F(i)是二次函数的探测方法。通常会选择f(i)=i2。和上次一样,把{89,18,49,58,69}插入到一个散列表中,这次用平方探测看看效果,再复习一下探测规则:hi(x)= ( Hash(x) + F(I) ) % TableSize(I=0,1,2…)
脑内调试一下:49和89冲突时,下一个空闲位置是0号单元。58和18冲突时,i=1也冲突,再试i=2,h2(58)=(8+4)%10=2是空的可以放。69同理。
exp:Given a hash table of size 13 and the hash function h(x)=x%13. Please fill in the hash table with input numbers { 2, 15, 3, 16, 6, 25, 29 }. Assume that quadratic probing is used to solve collisions.
i 0 1 2 3 4 5 6 7 8 9 10 11 12
H[i] 29 2 15 3 6 16 25
2%13=2 ,15%13=2,已经被2占了所以(2+1)%13=3;
3%13=3已经被15占了,所以(3+1)%13=4;
16%13=3已经被占,且4号也已经被占,所以(3+2^2)%13=7;
25不说了,29%13=3,(3+3^2)%13=12也被站一直算到3+6 ^6=39得到0