字符串hash函数的本质

前言

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

现在看其本质算法.

本质

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

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

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

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

核心代码如下:

1240

BKDR Hash

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

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

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

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

1240

SDBM Hash

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

1240

RS Hash

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

1240

AP Hash

Arash Partow发明的一种hash算法。

1240

JS Hash

Justin Sobel编的一种hash算法。

1240

DEK hash

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

1240

FNV Hash

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

1240

DJB Hash

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

1240

PJW Hash

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

1240

CRC32 hash

这个就不需要介绍了.

1240

参考资料

General Purpose Hash Function Algorithms

其他文章

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

关于作者

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

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

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

1240

转载于:https://my.oschina.net/u/1245751/blog/862035

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值