适用的字符串hash函数
2016-09-02 20:52
204 查看
下面是综合情况比较好的两个字符串hash函数,就当做一个笔记吧:
整型hash函数:
static int _GetIndex(unsigned int addr)
{
return (addr * 2654435769UL) >> 24;
}
static int indexFor(int hash, int length)
{
return hash & (length - 1); //一般长度应为2的幂次方
}
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 语言程序(二)
- c语言实现hashmap(转载)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- Ruby中Hash的11个问题解答
- Ruby简明教程之数组和Hash介绍
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- 浅谈C语言转义字符和格式控制符
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C 语言简单加减乘除运算
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总