您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>源码下载>数值算法/人工智能>

hash表的实现原理

大小:0.3 MB 人气: 2017-09-28 需要积分:1

  软件开发中,一个hash表相当于把n个key随机放入到b个bucket中,以实现n个数据在b个单位空间的存储。

  我们发现hash表中存在一些有趣现象:

  hash表中key的分布规律

  当hash表中key和bucket数量一样时(n/b=1):

  37% 的bucket是空的

  37% 的bucket里只有1个key

  26% 的bucket里有1个以上的key(hash冲突)

  下图直观的展示了当n=b=20时,hash表里每个bucket中key的数量(按照key的数量对bucket做排序):

  hash表的实现原理

  往往我们对hash表的第一感觉是:如果将key随机放入所有的bucket,bucket中key的数量较为均匀,每个bucket里key数量的期望是1。

  而实际上,bucket里key的分布在n较小时非常不均匀;当n增大时,才会逐渐趋于平均。

  key的数量对3类bucket数量的影响

  下表表示当b不变,n增大时,n/b的值如何影响3类bucket的数量占比(冲突率即含有多于1个key的bucket占比):

  hash表的实现原理

  更直观一点,我们用下图来展示空bucket率和冲突率随n/b值的变化趋势:

  hash表的实现原理

  key数量对bucket均匀程度的影响

  上面几组数字是当n/b较小时有意义的参考值,但随n/b逐渐增大,空bucket与1个key的bucket数量几乎为0,绝大多数bucket含有多个key。

  当n/b超过1(1个bucket允许存储多个key), 我们主要观察的对象就转变成bucket里key数量的分布规律。

  下表表示当n/b较大,每个bucket里key的数量趋于均匀时,不均匀的程度是多少。

  为了描述这种不均匀的程度,我们使用bucket中key数量的最大值和最小值之间的比例((most-fewest)/most)来表示。

非常好我支持^.^

(0) 0%

不好我反对

(0) 0%

hash表的实现原理下载

相关电子资料下载

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!