各種hash 函式實現

2021-07-28 08:48:12 字數 1910 閱讀 6311

常用的字串hash函式還有elfhash,aphash等等,都是十分簡單有效的方法。這些函式使用

位運算使得每乙個字元都對最後的函式值產生影響。另外還有以md5和sha1為代表的雜湊函式,

這些函式幾乎不可能找到碰撞。

常用字串雜湊函式有bkdrhash,aphash,djbhash,jshash,rshash,sdbmhash,

pjwhash,elfhash等等。對於以上幾種雜湊函式,我對其進行了乙個小小的評測。 

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

bkdrhash20477448196.5510090.9582.0592.64

aphash23475449396.5588.4610051.2886.28

djbhash22497547496.5592.31010083.43

jshash14476150610084.6296.8317.9581.94

rshash10486150510010051.5820.5175.96

sdbmhash32484950493.192.3157.0123.0872.41

pjwhash302648785130043.89021.95

elfhash302648785130043.89021.95

其中資料1為100000個字母和數字組成的隨機串雜湊衝突個數。資料2為100000個有意義的英文句

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

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

經過比較,得出以上平均得分。平均數為平方平均數。可以發現,bkdrhash無論是在實際效果還是

編碼實現中,效果都是最突出的。aphash也是較為優秀的演算法。djbhash,jshash,rshash與

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

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

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

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

unsigned int sdbmhash(char *str)

return (hash & 0x7fffffff);} 

// rs hash 

unsigned int rshash(char *str)

return (hash & 0x7fffffff);} 

// js hash 

unsigned int jshash(char *str)

return (hash & 0x7fffffff);} 

// p. j. weinberger hash 

unsigned int pjwhash(char *str)

}return (hash & 0x7fffffff);} 

// elf hash 

unsigned int elfhash(char *str)

}return (hash & 0x7fffffff);} 

// bkdr hash 

unsigned int bkdrhash(char *str)

return (hash & 0x7fffffff);} 

// djb hash 

unsigned int djbhash(char *str)

return (hash & 0x7fffffff);} 

// ap hash 

unsigned int aphash(char *str)

else

}return (hash & 0x7fffffff);

}

各種hash 函式

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

各種hash函式

public class hashalgorithms 旋轉hash param key 輸入字串 param prime 質數 return hash值 public static int rotatinghash string key,int prime 替代 使用 hash hash hash...

各種字串Hash函式比較

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