适用的字符串hash函数

来源:互联网 发布:手机和mac照片同步 编辑:程序博客网 时间:2024/05/16 01:19

下面是综合情况比较好的两个字符串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 * 438474637if (*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的幂次方
}



0 0
原创粉丝点击