hash函数实现
来源:互联网 发布:竞品调研报告知乎 编辑:程序博客网 时间:2024/04/30 07:24
Hash Functions
A comprehensive collection of hash functions, a hash visualiser and some test results [see Mckenzie et al. Selecting a Hashing Algorithm, SP&E 20(2):209-224, Feb 1990] will be available someday. If you just want to have a good hash function, and cannot wait, djb2 is one of the best string hash functions i know. it has excellent distribution and speed on many different sets of keys and table sizes. you are not likely to do better with one of the "well known" functions such as PJW, K&R[1], etc. Also see tpop pp. 126 for graphing hash functions.
djb2
this algorithm (k=33) was first reported by dan bernstein many years ago in comp.lang.c. another version of this algorithm (now favored by bernstein) uses xor: hash(i) = hash(i - 1) * 33 ^ str[i]; the magic of number 33 (why it works better than many other constants, prime or not) has never been adequately explained.unsigned long
hash(unsigned char *str)
{
unsigned long hash = 5381;
int c;
while (c = *str++)
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
return hash;
}
sdbm
this algorithm was created for sdbm (a public-domain reimplementation of ndbm) database library. it was found to do well in scrambling bits, causing better distribution of the keys and fewer splits. it also happens to be a good general hashing function with good distribution. the actual function is hash(i) = hash(i - 1) * 65599 + str[i]; what is included below is the faster version used in gawk. [there is even a faster, duff-device version] the magic constant 65599 was picked out of thin air while experimenting with different constants, and turns out to be a prime. this is one of the algorithms used in berkeley db (seestatic unsigned long
sdbm(str)
unsigned char *str;
{
unsigned long hash = 0;
int c;
while (c = *str++)
hash = c + (hash << 6) + (hash << 16) - hash;
return hash;
}
lose lose
This hash function appeared in K&R (1st ed) but at least the reader was warned: "This is not the best possible algorithm, but it has the merit of extreme simplicity." This is an understatement; It is aterrible hashing algorithm, and it could have been much better without sacrificing its "extreme simplicity." [see the second edition!] Many C programmers use this function without actually testing it, or checking something like Knuth's Sorting and Searching, so it stuck. It is now found mixed with otherwise respectable code, eg. cnews. sigh. [see also: tpop]unsigned long
hash(unsigned char *str)
{
unsigned int hash = 0;
int c;
while (c = *str++)
hash += c;
return hash;
}
- hash函数实现
- hash函数实现
- scala实现Hash函数
- 各种hash 函数实现
- 再收集几个Hash函数的实现
- hash_map 自实现hash函数容器错误
- 各种字符串Hash函数比较及实现
- Java HashMap的hash函数实现
- Hash 函数、Hash表
- hash函数
- hash函数
- hash函数
- hash函数
- Hash函数
- Hash函数
- Hash函数
- hash函数
- hash函数
- POJ 2907 Collecting Beepers
- gcd递归定理(某公司实习生招聘笔试题目)
- WinForm程序中两份mdf文件问题的解决
- AppStore程序发布过程总结
- win7系统盘瘦身秘诀
- hash函数实现
- 悲喜一瞬间,此悲伤非彼悲伤:伤感日志
- 近期笔试
- 图论--Floyd_Warshall算法---邻接矩阵实现
- 可供怀念的时光,都已经死掉了
- 网络应用瑞士军刀——Zentyal
- ubuntu 12.04 安装相关包
- Cookie详解
- 假温柔的伤感空间日志发布:我只是你生命中的一个过客罢了··