开放定址法处理冲突
其中,H(key)为哈希函数 m为哈希表长 di为增量序列
可有下列3种取法:
(1).
,称为线性探测再散列;
(2). 称二次探测再散列。
(3). di = 伪随机数序列,称伪随机探测再散列。
#include<bits/stdc++.h>
int a[505];
int main()
{
int n,p,i,j,m,k;
while(~scanf("%d %d",&n,&p))
{
memset(a,-1,sizeof(a));
for(i=1;i<=n;i++)
{
scanf("%d",&m);
k=m%p;
if(a[k]==-1)
{
a[k]=m;
}
else
{
for(j=1;j<=n;j++)
{
k=(m+j*j)%p;
if(a[k]==-1)
{
a[k]=m;
break;
}
else
{
k=(m-j*j)%p;
if(a[k]==-1)
{
a[k]=m;
break;
}
}
}
}
if(i==n) printf("%d\n",k);
else printf("%d ",k);
}
}
return 0;
}