一些常用的字符串hash函数

 General Hash Function Source Code:

unsigned int RSHash(const std::string& str)
{
    unsigned int b    = 378551;
    unsigned int a    = 63689;
    unsigned int hash = 0;

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

    return hash;
}
/* End Of RS Hash Function */

unsigned int JSHash(const std::string& str)
{
    unsigned int hash = 1315423911;

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

    return hash;
}
/* End Of JS Hash Function */

unsigned int PJWHash(const std::string& str)
{
    unsigned int BitsInUnsignedInt = (unsigned int)(sizeof(unsigned int) * 8);
    unsigned int ThreeQuarters     = (unsigned int)((BitsInUnsignedInt  * 3) / 4);
    unsigned int OneEighth         = (unsigned int)(BitsInUnsignedInt / 8);
    unsigned int HighBits          = (unsigned int)(0xFFFFFFFF) << (BitsInUnsignedInt - OneEighth);
    unsigned int hash              = 0;
    unsigned int test              = 0;

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

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

    return hash;
}
/* End Of  P. J. Weinberger Hash Function */

unsigned int ELFHash(const std::string& str)
{
    unsigned int hash = 0;
    unsigned int x    = 0;

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

    return hash;
}
/* End Of ELF Hash Function */

unsigned int BKDRHash(const std::string& str)
{
    unsigned int seed = 131; // 31 131 1313 13131 131313 etc..
    unsigned int hash = 0;

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

    return hash;
}
/* End Of BKDR Hash Function */

unsigned int SDBMHash(const std::string& str)
{
    unsigned int hash = 0;

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

    return hash;
}
/* End Of SDBM Hash Function */

unsigned int DJBHash(const std::string& str)
{
    unsigned int hash = 5381;

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

    return hash;
}
/* End Of DJB Hash Function */

unsigned int DEKHash(const std::string& str)
{
    unsigned int hash = static_cast<unsigned int>(str.length());

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

    return hash;
}
/* End Of DEK Hash Function */

unsigned int BPHash(const std::string& str)
{
    unsigned int hash = 0;
    for(std::size_t i = 0; i < str.length(); i++)
    {
        hash = hash << 7 ^ str[i];
    }

    return hash;
}
/* End Of BP Hash Function */

unsigned int FNVHash(const std::string& str)
{
    const unsigned int fnv_prime = 0x811C9DC5;
    unsigned int hash = 0;
    for(std::size_t i = 0; i < str.length(); i++)
    {
        hash *= fnv_prime;
        hash ^= str[i];
    }

    return hash;
}
/* End Of FNV Hash Function */

unsigned int APHash(const std::string& str)
{
    unsigned int hash = 0xAAAAAAAA;

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

    return hash;
}
/* End Of AP Hash Function */

 

作者:阿凡卢

出处:http://www.cnblogs.com/luxiaoxun/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

http://www.cnblogs.com/luxiaoxun/archive/2012/08/06/2625659.html

时间: 2024-11-08 22:10:42

一些常用的字符串hash函数的相关文章

C中一些常用的字符串hash函数

 代码如下 复制代码 //SDBM Hash Function unsigned int SDBMHash(char *str)  {      unsigned int hash = 0;      while (*str)      {          // equivalent to: hash = 65599*hash + (*str++);           hash = (*str++) + (hash << 6) + (hash << 16) - hash;   

PHP开发中常用的字符串操作函数

1,拼接字符串 拼接字符串是最常用到的字符串操作之一,在PHP中支持三种方式对字符串进行拼接操作,分别是圆点.分隔符{}操作,还有圆点等号.=来进行操作,圆点等号可以把一个比较长的字符串分解为几行进行定义,这样做是比较有好处的. 2,替换字符串 在PHP这门语言中,提供了一个名字叫做substr_replace()的函数,该函数的作用可以快速的完成扫描和编辑文本内容较多的字符串替换功能.他的语法格式: mixed substr_replace(mixed $string,string $repl

PHP开发中常用的字符串操作函数_php技巧

1,拼接字符串 拼接字符串是最常用到的字符串操作之一,在PHP中支持三种方式对字符串进行拼接操作,分别是圆点.分隔符{}操作,还有圆点等号.=来进行操作,圆点等号可以把一个比较长的字符串分解为几行进行定义,这样做是比较有好处的. 2,替换字符串 在PHP这门语言中,提供了一个名字叫做substr_replace()的函数,该函数的作用可以快速的完成扫描和编辑文本内容较多的字符串替换功能.他的语法格式: mixed substr_replace(mixed $string,string $repl

mysql常用日期 字符串处理函数命令

函数如下: left,right  字符串截取 from_unixtime  格式化unix时间戳 concat  字符串连接函数 max  取某列最大值 min 取某列最小值 sum 计算某列的和 count 统计条数 md5 返回md5加密码的串 format 格式化数字为xx,xxx,xxx.xxxx格式 比如1,1000.123 length   计算某个字符串长度 distinct  去重复 replace  替换字符串 in 指定查询某个值的记录 like  模糊查询 is null

PHP中常用的字符串格式化函数总结_php技巧

字符串的格式化就是将字符串处理为某种特定的格式.通常用户从表单中提交给服务器的数据都是字符串的形式,为了达到期望的输出效果,就需要按照一定的格式处理这些字符串后再去使用.经常见到的字符串格式化函数如下图所示: 注意:在PHP中提供的字符串函数处理的字符串,大部分都不是在原字符串上修改,而是返回一个格式化后的新字符串. 一.取出空格和字符串填补函数 空格也是一个有效的字符,在字符串中也会占据一个位置.用户在表单输入数据时,经常在无意中会多输入一些无意义的空格.因此PHP脚本在接收到通过表单处理过来

.net常用的字符串处理函数

一.字符转换函数 1.ASCII() 返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字符串可不用''括起来,但含其它字符的字符串必须用''括起来使用,否则会出错. 2.CHAR() 将ASCII 码转换为字符.如果没有输入0 ~ 255 之间的ASCII 码值,CHAR() 返回NULL . 3.LOWER()和UPPER() LOWER()将字符串全部转为小写:UPPER()将字符串全部转为大写. 4.STR() 把数值型数据转换为字符型数据. STR (<flo

asp 常用的字符串处理函数

Class Cls_Fun  Private x,y,ii  ==============================  函 数 名:AlertInfo  作    用:错误显示函数  参    数:错误提示内容InfoStr,转向页面GoUrl  ==============================  Public Function AlertInfo(InfoStr,GoUrl)   If GoUrl="1" Then    Response.Write "&

Ruby中常用的字符串处理函数使用实例_ruby专题

1.返回字符串的长度 复制代码 代码如下: str.length => integer 2.判断字符串中是否包含另一个串 复制代码 代码如下: str.include? other_str => true or false "hello".include? "lo"   #=> true "hello".include? "ol"   #=> false "hello".includ

解析C++中的字符串处理函数和指针_C 语言

C++字符串处理函数 字符串连接函数 strcat 其函数原型为 strcat(char[],const char[]); strcat是string catenate(字符串连接)的缩写.该函数有两个字符数组的参数,函数的作用是:将第二个字符数组中的字符串连接到前面字符数组的字符串的后面.第二个字符数组被指定为const,以保证该数组中的内容不会在函数调用期间修改.连接后的字符串放在第一个字符数组中,函数调用后得到的函数值,就是第一个字符数组的地址.例如: char str1[30]=″Peo