常用hash演算法總結

2021-07-11 03:56:54 字數 1667 閱讀 6401

常用字串雜湊函式有bkdrhash,aphash,djbhash,jshash,rshash,sdbmhash,pjwhash,elfhash等等。對於以上幾種雜湊函式,我對其進行了乙個小小的評測。

hash函式

資料1資料2

資料3資料4

資料1得分

資料2得分

資料3得分

資料4得分

平均分bkdrhash20

4774

48196.55

10090.95

82.05

92.64

aphash23

4754

49396.55

88.46

10051.28

86.28

djbhash22

4975

47496.55

92.31

0100

83.43

jshash14

4761

506100

84.62

96.83

17.95

81.94

rshash10

4861

505100

10051.58

20.51

75.96

sdbmhash32

4849

50493.1

92.31

57.01

23.08

72.41

pjwhash

3026

4878

5130

043.89

021.95

elfhash

3026

4878

5130

043.89

021.95

其中資料1為100000個字母和數字組成的隨機串雜湊衝突個數。資料2為100000個有意義的英文句子雜湊衝突個數。資料3為資料1的雜湊值與1000003(大素數)求模後儲存到線性表中衝突的個數。資料4為資料1的雜湊值與10000019(更大素數)求模後儲存到線性表中衝突的個數。

經過比較,得出以上平均得分。平均數為平方平均數。可以發現,bkdrhash無論是在實際效果還是編碼實現中,效果都是最突出的。aphash也是較為優秀的演算法。djbhash,jshash,rshash與sdbmhash各有千秋。pjwhash與elfhash效果最差,但得分相似,其演算法本質是相似的。

在資訊修競賽中,要本著易於編碼除錯的原則,個人認為bkdrhash是最適合記憶和使用的

7.djb

這個演算法是daniel j.bernstein 教授發明的,是目前公布的最有效的雜湊函式。

public long djbhash(string str)  

return hash;

}

5.bkdr

這個演算法來自brian kernighan 和 dennis ritchie的the c programming language。這是乙個很簡單的雜湊演算法,使用了一系列奇怪的數字,形式如31,3131,31...31,看上去和djb演算法

public long bkdrhash(string str)  

return hash;

}

參考:

幾種常用的hash演算法

計算理論中,沒有hash函式的說法,只有單向函式的說法。所謂的單向函式,是乙個複雜的定義,大家可以去看計算理論或者密碼學方面的資料。用 人 類 的語言描述單向函式就是 如果某個函式在給定輸入的時候,很容易計算出其結果來 而當給定結果的時候,很難計算出輸入來,這就是單項函式。各種加密函 數都可以被認為...

幾種常用hash演算法及原理

計算理論中,沒有hash函式的說法,只有單向函式的說法。所謂的單向函式,是乙個複雜的定義,大家可以去看計算理論或者密碼學方面的資料。用 人 類 的語言描述單向函式就是 如果某個函式在給定輸入的時候,很容易計算出其結果來 而當給定結果的時候,很難計算出輸入來,這就是單項函式。各種加密函 數都可以被認為...

hash表 hash演算法

概念 雜湊表 hash table。也叫雜湊表 是依據關鍵碼值 key value 而直接進行訪問的 資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。給定表m,存在函式f key 對隨意給定的keyword值ke...