常用Hash算法(C语言的简单实现)
如下所示:
#include"GeneralHashFunctions.h"
unsignedintRSHash(char*str,unsignedintlen)
{
unsignedintb=378551;
unsignedinta=63689;
unsignedinthash=0;
unsignedinti=0;
for(i=0;i<len;str++,i++)
{
hash=hash*a+(*str);
a=a*b;
}
returnhash;
}
/*EndOfRSHashFunction*/
unsignedintJSHash(char*str,unsignedintlen)
{
unsignedinthash=1315423911;
unsignedinti=0;
for(i=0;i<len;str++,i++)
{
hash^=((hash<<5)+(*str)+(hash>>2));
}
returnhash;
}
/*EndOfJSHashFunction*/
unsignedintPJWHash(char*str,unsignedintlen)
{
constunsignedintBitsInUnsignedInt=(unsignedint)(sizeof(unsignedint)*8);
constunsignedintThreeQuarters=(unsignedint)((BitsInUnsignedInt*3)/4);
constunsignedintOneEighth=(unsignedint)(BitsInUnsignedInt/8);
constunsignedintHighBits=(unsignedint)(0xFFFFFFFF)<<(BitsInUnsignedInt-OneEighth);
unsignedinthash=0;
unsignedinttest=0;
unsignedinti=0;
for(i=0;i<len;str++,i++)
{
hash=(hash<<OneEighth)+(*str);
if((test=hash&HighBits)!=0)
{
hash=((hash^(test>>ThreeQuarters))&(~HighBits));
}
}
returnhash;
}
/*EndOfP.J.WeinbergerHashFunction*/
unsignedintELFHash(char*str,unsignedintlen)
{
unsignedinthash=0;
unsignedintx=0;
unsignedinti=0;
for(i=0;i<len;str++,i++)
{
hash=(hash<<4)+(*str);
if((x=hash&0xF0000000L)!=0)
{
hash^=(x>>24);
}
hash&=~x;
}
returnhash;
}
/*EndOfELFHashFunction*/
unsignedintBKDRHash(char*str,unsignedintlen)
{
unsignedintseed=131;/*31131131313131131313etc..*/
unsignedinthash=0;
unsignedinti=0;
for(i=0;i<len;str++,i++)
{
hash=(hash*seed)+(*str);
}
returnhash;
}
/*EndOfBKDRHashFunction*/
unsignedintSDBMHash(char*str,unsignedintlen)
{
unsignedinthash=0;
unsignedinti=0;
for(i=0;i<len;str++,i++)
{
hash=(*str)+(hash<<6)+(hash<<16)-hash;
}
returnhash;
}
/*EndOfSDBMHashFunction*/
unsignedintDJBHash(char*str,unsignedintlen)
{
unsignedinthash=5381;
unsignedinti=0;
for(i=0;i<len;str++,i++)
{
hash=((hash<<5)+hash)+(*str);
}
returnhash;
}
/*EndOfDJBHashFunction*/
unsignedintDEKHash(char*str,unsignedintlen)
{
unsignedinthash=len;
unsignedinti=0;
for(i=0;i<len;str++,i++)
{
hash=((hash<<5)^(hash>>27))^(*str);
}
returnhash;
}
/*EndOfDEKHashFunction*/
unsignedintBPHash(char*str,unsignedintlen)
{
unsignedinthash=0;
unsignedinti=0;
for(i=0;i<len;str++,i++)
{
hash=hash<<7^(*str);
}
returnhash;
}
/*EndOfBPHashFunction*/
unsignedintFNVHash(char*str,unsignedintlen)
{
constunsignedintfnv_prime=0x811C9DC5;
unsignedinthash=0;
unsignedinti=0;
for(i=0;i<len;str++,i++)
{
hash*=fnv_prime;
hash^=(*str);
}
returnhash;
}
/*EndOfFNVHashFunction*/
unsignedintAPHash(char*str,unsignedintlen)
{
unsignedinthash=0xAAAAAAAA;
unsignedinti=0;
for(i=0;i<len;str++,i++)
{
hash^=((i&1)==0)?((hash<<7)^(*str)*(hash>>3)):
(~((hash<<11)+((*str)^(hash>>5))));
}
returnhash;
}
/*EndOfAPHashFunction*/
以上就是小编为大家带来的常用Hash算法(C语言的简单实现)的全部内容了,希望对大家有所帮助,多多支持毛票票~