一组字符串散列函数

unsignedintRSHash(conststd::string&str)
{
unsignedintb=378551;
unsignedinta=63689;
unsignedinthash=0;

for(std::size_ti=0;i<str.length();i++)
{
hash=hash*a+str[i];
a=a*b;
}

returnhash;
}
/*EndOfRSHashFunction*/


unsignedintJSHash(conststd::string&str)
{
unsignedinthash=1315423911;

for(std::size_ti=0;i<str.length();i++)
{
hash^=((hash<<5)+str[i]+(hash>>2));
}

returnhash;
}
/*EndOfJSHashFunction*/


unsignedintPJWHash(conststd::string&str)
{
unsignedintBitsInUnsignedInt=(unsignedint)(sizeof(unsignedint)*8);
unsignedintThreeQuarters=(unsignedint)((BitsInUnsignedInt*3)/4);
unsignedintOneEighth=(unsignedint)(BitsInUnsignedInt/8);
unsignedintHighBits=(unsignedint)(0xFFFFFFFF)<<(BitsInUnsignedInt-OneEighth);
unsignedinthash=0;
unsignedinttest=0;

for(std::size_ti=0;i<str.length();i++)
{
hash=(hash<<OneEighth)+str[i];

if((test=hash&HighBits)!=0)
{
hash=((hash^(test>>ThreeQuarters))&(~HighBits));
}
}

returnhash;
}
/*EndOfP.J.WeinbergerHashFunction*/


unsignedintELFHash(conststd::string&str)
{
unsignedinthash=0;
unsignedintx=0;

for(std::size_ti=0;i<str.length();i++)
{
hash=(hash<<4)+str[i];
if((x=hash&0xF0000000L)!=0)
{
hash^=(x>>24);
}
hash&=~x;
}

returnhash;
}
/*EndOfELFHashFunction*/


unsignedintBKDRHash(conststd::string&str)
{
unsignedintseed=131;//31131131313131131313etc..
unsignedinthash=0;

for(std::size_ti=0;i<str.length();i++)
{
hash=(hash*seed)+str[i];
}

returnhash;
}
/*EndOfBKDRHashFunction*/


unsignedintSDBMHash(conststd::string&str)
{
unsignedinthash=0;

for(std::size_ti=0;i<str.length();i++)
{
hash=str[i]+(hash<<6)+(hash<<16)-hash;
}

returnhash;
}
/*EndOfSDBMHashFunction*/


unsignedintDJBHash(conststd::string&str)
{
unsignedinthash=5381;

for(std::size_ti=0;i<str.length();i++)
{
hash=((hash<<5)+hash)+str[i];
}

returnhash;
}
/*EndOfDJBHashFunction*/


unsignedintDEKHash(conststd::string&str)
{
unsignedinthash=static_cast<unsignedint>(str.length());

for(std::size_ti=0;i<str.length();i++)
{
hash=((hash<<5)^(hash>>27))^str[i];
}

returnhash;
}
/*EndOfDEKHashFunction*/


unsignedintBPHash(conststd::string&str)
{
unsignedinthash=0;
for(std::size_ti=0;i<str.length();i++)
{
hash=hash<<7^str[i];
}

returnhash;
}
/*EndOfBPHashFunction*/


unsignedintFNVHash(conststd::string&str)
{
constunsignedintfnv_prime=0x811C9DC5;
unsignedinthash=0;
for(std::size_ti=0;i<str.length();i++)
{
hash*=fnv_prime;
hash^=str[i];
}

returnhash;
}
/*EndOfFNVHashFunction*/


unsignedintAPHash(conststd::string&str)
{
unsignedinthash=0xAAAAAAAA;

for(std::size_ti=0;i<str.length();i++)
{
hash^=((i&1)==0)?((hash<<7)^str[i]*(hash>>3)):
(~((hash<<11)+(str[i]^(hash>>5))));
}

returnhash;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值