常用字串hash演算法

2021-06-29 03:40:47 字數 1763 閱讀 9678

以前學習資料結構中有關hash部分的時候一帶而過,現在真正在實踐中用到的時候才感受到hash的魅力。hdoj1800可作為練習

以下是常用字串hash演算法的簡單對比分析:

hash函式

資料1資料2

資料3資料4

資料1分數

資料2分數

資料3分數

資料4分數

平均rshash10

4861

505100

10051.58

20.51

75.96

jshash14

4761

506100

84.62

96.83

17.95

81.94

pjwhash

3026

4878

5130

043.89

021.95

elfhash

3026

4878

5130

043.89

021.95

bkdrhash20

4774

48196.55

10090.95

82.05

92.64

sdbmhash32

4849

50493.1

92.31

57.01

23.08

72.41

djbhash22

4975

47496.55

88.46

0100

83.43

aphash23

4754

49396.55

88.46

10051.28

86.28 注:

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

// rs hash function

unsigned int rshash(char* str)

return (hash & 0x7fffffff);

}// js hash function

unsigned int jshash(char* str)

// p. j. weinberger hash function

unsigned int pjwhash(char* str)

return (hash & 0x7fffffff);

}// elf hash function

unsigned int elfhash(char* str)

}return (hash & 0x7fffffff);

}// bkdr hash function

unsigned int bkdrhash(char* str)

// sdbm hash function

unsigned int sdbmhash(char* str)

// djb hash function

unsigned int djbhash(char* str)

// ap hash function

unsigned int aphash(char* str)

return (hash & 0x7fffffff);

}

常用字串演算法

一 判斷兩個字串是否包含相同的內容 1.巧用陣列下標實現,把用字元的ascii碼值當作下標,記錄出現的字元,然後對兩字串進行遍歷 判斷s於s2是否相同 param s param s2 return boolean static boolean equals string s,string s2 四...

mysql常用字串 MYSQL常用字串函式寶典

mysql常用字串函式 想更進一步加強自己在查詢語句方面的能力,需要掌握常用函式。字串函式 1 concat s1,s2,sn 將s1,s2,sn串聯成乙個字串。exp root test 14 43 desc t1 field type null key default extra id int ...

幾種常用字串演算法

去年寫的,已經發霉,出來晾一晾 模式串p在母串s上的匹配。define m 100000 int pre m n,m void set string p int kmp string s,string p return r 找到乙個自迴圈串的最小表示。先定義t i,k 表示乙個以i為起點,長為k的串...