Chinaunix首页 | 论坛 | 博客
  • 博客访问: 803972
  • 博文数量: 330
  • 博客积分: 9641
  • 博客等级: 中将
  • 技术积分: 3181
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
文章分类

全部博文(330)

文章存档

2012年(17)

2011年(135)

2010年(85)

2009年(57)

2008年(36)

我的朋友

分类:

2011-06-15 23:07:25

文章来源:http://blog.csdn.net/jiaomeng/archive/2007/03/07/1523056.aspx

下面介绍简单介绍一下d-left hashingd-left hashing中的d是多个的意思,我们先简化这个问题,看一看2-left hashing2-left hashing指的是将一个哈希表分成长度相等的两半,分别叫做T1T2,给T1T2分别配备一个哈希函数,h1h2。在存储一个新的key时,同时用两个哈希函数进行计算,得出两个地址h1[key]h2[key]。这时需要检查T1中的h1[key]位置和T2中的h2[key]位置,哪一个位置已经存储的(有碰撞的)key比较多,然后将新key存储在负载少的位置。如果两边一样多,比如两个位置都为空或者都存储了一个key,就把新key存储在左边的T1子表中,2-left也由此而来。在查找一个key时,必须进行两次hash,同时查找两个位置。

 

上面的介绍中有一点要注意,就是在作位置选择时,考虑的是两个哈希函数映射的位置中已经存储的key(包括碰撞的情况)的个数,而不是两个子表中已有key的个数。

 

了解了2-left hashingd-left hashing就很好理解,它只是对前者的扩展。2-left hashing固定了子表的个数是2d-left hashing更加灵活,子表的个数是一个变量d,同时也意味着哈希函数的个数是d。在d-left hashing中,整个哈希表被分成d个从左到右依次相邻的子表,每个子表对应一个相互独立的哈希函数。在加入新key时,这个keyd个哈希函数同时计算,产生d个相互独立的位置,然后将key加入到负载最轻的位置(bucket)中。如果负载最轻的位置有多个,就把key加入到最左边的负载最轻的子表中。同样地,如果要查找一个key,需要同时查找d个位置。



阅读(426) | 评论(0) | 转发(0) |
0

上一篇:Counting Bloom Filter

下一篇:Spectral Bloom Filter

给主人留下些什么吧!~~