以前學習資料結構中有關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的串...