// RS Hash Function
unsigned int RSHash(char *str)
{
unsigned int b=378551;
unsigned int a=63689;
unsigned int hash=0;
while(*str)
{
hash=hash*a+(*str++);
a*=b;
}
return (hash & 0x7fffffff);
}
//JS Hash Function
unsigned int JSHash(char *str)
{
unsigned int hash=1315423911;
while(*str)
{
hash^=((hash << 5)+(*str++)+(hash>>2));
}
return (hash & 0x7fffffff);
}
//P.J Weinberger Hash Function
unsigned int PJWHash(char *str)
{
unsigned int BitsInUnignedInt=(unsigned int)(sizeof(unsigned int)*8);
unsigned int ThreeQuarters=(unsigned int)((BitsInunignedInt*3)/4);
unsigned int OneEighth=(unsigned int)(BitsInUnignedInt/8);
unsigned int hash=0;
unsigned int test=0;
while(*str)
{
hash=(hash<<OneEighth)+(*str++);
if((test=hash & HighBits)!=0)
{
hash=((hash^(test>>ThreeQuarters)) & (^HighBits));
}
}
return (hash & 0x7fffffff);
}
//ELF Hash Function
unsigned int ELFHash(char *str)
{
unsigned int hash=0;
unsigned int x=0;
while(*str)
{
hash=(hash<<4)+(*str++);
if((x=hash & 0xf0000000L)!=0)
{
hash^=(x>>24);
hash &=~x;
}
}
return (hash & 0x7fffffff);
}
//BKDR Hash Function
unsigned int BKDRHash(char *str)
{
unsigned int seed=131;//31 131 1313 13131 131313 etc..
unsigned int hash=0;
while(*str)
{
hash=hash*seed+(*str++);
}
return (hash & 0x7fffffff);
}
//SDBM Hash Function
unsigned int SDBMHash(char *str)
{
unsigned int hash=0;
while(*str)
{
hash+=(hash<<5)+(*str++);
}
return (hash & 0x7fffffff);
}
//AP Hash Function
unsigned int APHash(char *str)
{
unsigned int hash=0;
int i;
for(i=0;*str;i++)
{
if((i&1)==0)
{
hash^=((hash<<7)^(*str++)^(hash>>3));
}
else
{
hash^=(~((hash<<11)^(*str++)^(hash>>5)));
}
}
return (hash & 0x7fffffff);
}
//ELF hash Function比较常用
没有评论:
发表评论