常用的字串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...