各種字串Hash函式比較

2021-06-28 12:52:22 字數 2253 閱讀 2528

常用的字串hash函式還有elfhash,aphash等等,都是十分簡單有效的方法。這些函式使用位運算使得每乙個字元都對最後的函式值產生影響。另外還有以

md5和sha1為代表的雜湊函式,這些函式幾乎不可能找到碰撞。

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

的評測。

hash函式      資料1     資料2   資料3   資料4    1得分    2得分    3得分     4得分    平均分

bkdrhash     2          0         4774    481     96.55   100      90.95    82.05   92.64

aphash         2          3         4754    493     96.55   88.46   100        51.28   86.28

djbhash       2           2        4975    474      96.55   92.31   0           100      83.43

jshash         1           4         4761    506     100      84.62   96.83    17.95    81.94

rshash         1          0         4861    505     100      100      51.58     20.51   75.96

sdbmhash    3          2         4849    504      93.1     92.31   57.01    23.08   72.41

pjwhash      30        26       4878    513      0          0          43.89    0          21.95

elfhash       30        26        4878    513     0          0          43.89    0          21.95

其中資料1為100000個字母和數字組成的隨機串雜湊衝突個數。資料2為100000個有意義的英文句子雜湊衝突個數。資料3為資料1的雜湊值與1000003(大素數)

求模後儲存到線性表中衝突的個數。資料4為資料1的雜湊值與10000019(更大素數)求模後儲存到線性表中衝突的個數。

經過比較,得出以上平均得分。平均數為平方平均數。可以發現,bkdrhash無論是在實際效果還是編碼實現中,效果都是最突出的。aphash也是較為優秀的

演算法。djbhash,jshash,rshash與sdbmhash各有千秋。pjwhash與elfhash效果最差,但得分相似,其演算法本質是相似的。

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

byvoid原創,歡迎建議、交流、批評和指正。

附:各種雜湊函式的c語言程式**

// bkdr hash function  

unsigned int bkdrhash(char *str)

// ap hash function

unsigned int aphash(char *str)

// djb hash function

unsigned int djbhash(char *str)

// js hash function

unsigned int jshash(char *str)

// rs hash function

unsigned int rshash(char *str)

return (hash & 0x7fffffff);

} unsigned int sdbmhash(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);

}

各種字串Hash函式比較

文章 自 常用的字串hash函式還有elfhash,aphash等等,都是十分簡單有效的方法。這些函式使用 位運算使得每乙個字元都對最後的函式值產生影響。另外還有以md5和sha1為代表的雜湊函式,這些函式幾乎不可能找到碰撞。常用字串雜湊函式有bkdrhash,aphash,djbhash,jsha...

各種字串hash函式比較

文章 自 常用的字串hash函式還有elfhash,aphash等等,都是十分簡單有效的方法。這些函式使用 位運算使得每乙個字元都對最後的函式值產生影響。另外還有以md5和sha1為代表的雜湊函式,這些函式幾乎不可能找到碰撞。常用字串雜湊函式有bkdrhash,aphash,djbhash,jsha...

各種字串Hash函式比較

常用的字串hash函式還有elfhash,aphash等等,都是十分簡單有效的方法。這些函式使用位運算使得每乙個字元都對最後的函式值產生影響。另外還有以md5和sha1為代表的雜湊函式,這些函式幾乎不可能找到碰撞。常用字串雜湊函式有bkdrhash,aphash,djbhash,jshash,rsh...