每日最新情感日志速递平台 第一时间了解互联网的新鲜句子。

经典字符串hash函数介绍及性能比较

发布时间:2018-05-15 15:39 类别:手机购彩

  :对100000个由大小写字母与数字随机的ANSI字符串(无反复,每个字符串最大长度不跨越64字符)进行散列:

  测试2:对100000个由肆意UNICODE构成随机字符串(无反复,每个字符串最大长度不跨越64字符)进行散列:

  测试3:对1000000个随机ANSI字符串(无反复,每个字符串最大长度不跨越64字符)进行散列:

  结论:也许是我的样本具有一些特殊性,在对ASCII码字符串进行散列时,PJW与ELF Hash(它们其实是统一种算法)无论是质量仍是效率,都相当蹩脚;例如:b5与“aE,这两个字符串按照PJW散列出来的hash值就是一样的。 别的,其它几种依托异或来散列的哈希函数,如:JS/DEK/DJB Hash,在对字母与数字构成的字符串的散列结果也不怎样好。相对而言,仍是BKDR与SDBM这类简单的Hash效率与结果更好。

  常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单无效的方式。这些函数利用位运算使得每一个字符都对最初的函数值发生 影响。别的还有以MD5和SHA1为代表的杂凑函数,这些函数几乎不成能找到碰撞。

  此中数据1为100000个字母和数字构成的随机串哈希冲突个数。数据2为100000个成心义的英词句子哈希冲突个数。数据3为数据1的哈希值与 1000003(大素数)求模后存储到线性表中冲突的个数。数据4为数据1的哈希值与10000019(更大素数)求模后存储到线性表中冲突的个数。

  颠末比力,得出以上平均得分。平均数为平方平均数。能够发觉,BKDRHash无论是在现实结果仍是编码实现中,结果都是最凸起的。APHash也 是较为优良的算法。DJBHash,JSHash,RSHash与SDBMHash各有所长。PJWHash与ELFHash结果最差,但得分类似,其算 法素质是类似的。

http://qanamazar.com/shoujigoucai/150/

你可能喜欢的