- 论坛徽章:
- 0
|
int hash(int v,int Max)
{
char key[10];
int h=0,a=127,i;
i=snprintf(key,10,"%d",v);
for(i= 0;key;++i)
h=(a*h+key)%Max;
return h+v;//加V避免hash value 碰撞
}
struct hashValue{
int value;
int index;
};
int main()
{
int A[]={7,2,3,4,5,6,1,7,8,9,0};
int len,hlen;
int v;
struct hashValue *buff;
int j;
len=sizeof(A)/sizeof(int);
hlen=2*len;
buff=(struct hashValue*)malloc(sizeof(struct hashValue)*hlen);
for(j=0;j<len;j++){
v=hash(A[j],hlen-1);
if(buff[v].value==v){
printf("Find A[%d] and A[%d] ==%d\n",buff[v].index,j,A[j]);
break;
}else {
buff[v].value=v;
buff[v].index=j;
}
}
exit(0);
}
]$ ./test
Find A[0] and A[7] ==7
[ 本帖最后由 xfstone 于 2008-1-23 15:57 编辑 ] |
|