前言

以前在《memcached 源码阅读之 字元串 hash 与 搜集的一些 字元串 hash》中已经记录了一些hash函数.

现在看其本质演算法.

本质

如果对演算法不感兴趣的人, 只需要看看这个小节就行了, 下面小节的都是经典书籍与人物的演算法,都是本质演算法穿上了一个马甲.

hash函数的本质是扫描字元串过程中, 根据之前的结果, 当前位置,当前字元的值使用一个公式计算出当前结果.

当然稍微复杂的hash演算法会考虑之前所有的的结果,位置以及字元, 甚至会迭代多次.

这篇文章提到了一些书籍, 系统和一些人, 如果想要任何书籍的人都可以加公众号要相关书籍.

核心代码如下:

BKDR Hash

Brian KernighanDennis Ritchie的《The C Programming Language》一书被展示而得名,是一种简单快捷的hash演算法,也是Java目前采用的字元串的Hash演算法。

有人说将乘法分解为位运算及加减法可以提高效率.

但其实在Intel平台上,CPU内部对二者的处理效率都是差不多的;

在ARM这类RISC系统上由于ARM内部使用Booth』s Algorithm来模拟32位整数乘法运算,它的效率与乘数有关.

SDBM Hash

在开源项目SDBM(一种简单的资料库引擎)中被应用而得名,它与BKDRHash思想一致,只是种子不同而已。

RS Hash

Robert Sedgwicks在其《Algorithms in C》一书中展示而得名。

AP Hash

Arash Partow发明的一种hash演算法。

JS Hash

Justin Sobel编的一种hash演算法。

DEK hash

本演算法是由于Donald E. Knuth在《Art Of Computer Programming Volume 3》中展示而得名。

FNV Hash

Unix system系统中使用的一种著名hash演算法,后来微软也在其hash_map中实现。

DJB Hash

由Daniel J. Bernstein教授编的一种hash演算法。

PJW Hash

本演算法是基于AT&T贝尔实验室的Peter J. Weinberger的论文而发明的一种hash演算法。

CRC32 hash

这个就不需要介绍了.

参考资料

  • General Purpose Hash Function Algorithms

其他文章

UNION架构篇UNION优化篇UNION诞生篇union运营篇谈谈cache浪潮之巅排名演算法

关于作者

曾是一名ACMer, 现在是鹅长视频部门的后台开发

这里主要记录工作中的技术架构与经验,计算机相关的技术,数学、演算法、生活上好玩的东西

长按二维码关注作者, 了解作者发布的最新好玩的东西

aHR0cDovL3dlaXhpbi5xcS5jb20vci82RG1CbVZmRWFBb1hyUlA2OTJ6Ng== (二维码自动识别)

推荐阅读:

相关文章