字符串hash函數的本質

前言

之前在《memcached 源碼閱讀之 字符串 hash 與 蒐集的一些 字符串 hash》中已經記錄了一些hash函數.html

如今看其本質算法.git

本質

若是對算法不感興趣的人, 只須要看看這個小節就好了, 下面小節的都是經典書籍與人物的算法,都是本質算法穿上了一個馬甲.github

hash函數的本質是掃描字符串過程當中, 根據以前的結果, 當前位置,當前字符的值使用一個公式計算出當前結果.算法

固然稍微複雜的hash算法會考慮以前全部的的結果,位置以及字符, 甚至會迭代屢次.數據庫

這篇文章提到了一些書籍, 系統和一些人, 若是想要任何書籍的人均可以加公衆號要相關書籍.架構

核心代碼以下:memcached

BKDR Hash

Brian KernighanDennis Ritchie的《The C Programming Language》一書被展現而得名,是一種簡單快捷的hash算法,也是Java目前採用的字符串的Hash算法。函數

有人說將乘法分解爲位運算及加減法能夠提升效率.優化

但其實在Intel平臺上,CPU內部對兩者的處理效率都是差很少的;spa

在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, 如今是鵝長視頻部門的後臺開發

這裏主要記錄工做中的技術架構與經驗,計算機相關的技術,數學、算法、生活上好玩的東西

長按二維碼關注做者, 瞭解做者發佈的最新好玩的東西

相關文章
相關標籤/搜索