常用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语言的简单实现)的全部内容了,希望对大家有所帮助,多多支持毛票票~