哈希被广泛使用在很多领域,如数据存储,加密,计算机视觉(几何哈希),此处就简单整理下几个常见的Hash函数的实现,有空陆续补充吧。
BKDR Hash Function
1 | // 本算法由于在Brian Kernighan与Dennis Ritchie的《The C Programming Language》一书被展示而得名 |
其中累乘因子也可以为131、1313、13131,比如下述代码就使用了33。
1 | unsigned int times33(char *str) |
此算法也会有如下变种,如:
1 | unsigned int timesnum(char *str, int num) |
SDBM Hash Function
1 | // 本算法是由于在开源项目SDBM(一种简单的数据库引擎)中被应用而得名 |
AP Hash Function
1 | // Arash Partow发明的一种hash算法 |
FNV Hash Function
1 | // Unix system系统中使用的一种著名hash算法,后来微软也在其hash_map中实现。 |
其实关于为什么要用异或,我搜索了下原因,见Why is XOR the default way to combine hashes?
MySQL中出现的字符串哈希函数
1 | unsigned int MySQLhash(char *str) |
参考链接:
spiderq
各种哈希函数冲突率分析