Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4563044
  • 博文数量: 1214
  • 博客积分: 13195
  • 博客等级: 上将
  • 技术积分: 9105
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
个人简介

C++,python,热爱算法和机器学习

文章分类

全部博文(1214)

文章存档

2021年(13)

2020年(49)

2019年(14)

2018年(27)

2017年(69)

2016年(100)

2015年(106)

2014年(240)

2013年(5)

2012年(193)

2011年(155)

2010年(93)

2009年(62)

2008年(51)

2007年(37)

分类:

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个位置。



阅读(1008) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~