您的位置:首页 > 编程语言 > C语言/C++

适用的字符串hash函数

2016-09-02 20:52 204 查看
下面是综合情况比较好的两个字符串hash函数,就当做一个笔记吧:

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);
}

unsigned int JSHash(char *str)
{
unsigned int hash = 1315423911; // nearly a prime - 1315423911 = 3 * 438474637
if (*str == 0x00)
{
return 0;
}

while (*str)
{
hash ^= ((hash << 5) + (*str++) + (hash >> 2));
}

return (hash & 0x7FFFFFFF);
}


整型hash函数:

static int _GetIndex(unsigned int addr)

{

 return (addr * 2654435769UL) >> 24;

}

static int indexFor(int hash, int length)

{

 return hash & (length - 1); //一般长度应为2的幂次方

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言 hash