[数据结构]散列表-链接法和开放寻址法 线性探查

原创 2016年08月30日 23:31:56

在介绍hash表之前首先提到直接寻址表


但是由于实际上存储在字典里的关键字集合K比实际上所有可能的关键字的全域U要小的多,因此散列表所需要的存储空间比直接寻址表要小的多

 


 通过散列函数

h:U -> {0,1,2…m-1}

其中m 远小于|U|


但是对于h(2)=h(5)这样的访问冲突,我们采用两种方法来解决

①  链接法

②  开放定址法

 

链接法,插入最坏运行时间O(1),查找最坏运行时间和表的长度成正比。

 


开放寻址法,所有的元素都存储在散列表中,要系统的检查所有的表项,直到找到所需的元素,或者所需的不在表中。用开放寻址法来插入元素,需要进行探查,直到找到空的槽来存放关键字为止。典型的探查方法有线性探查

 

下面介绍一个线性探查的例子:(本位置X被占据,继续寻找下一个x+1的位置,直到找到空槽为止)
设散列表的长度为11,哈希函数H(k)=(k的第一个字母在字母表中的序号)mod11, 若输入的顺序为(D,BA,TN,M,CI,I,K,X,TA)采用内散列表,处理冲突方法为线性探查法,按要求构造哈希表,在等概率的情况下,查找成功的平均查找长度为?

 

D: 4%11=4   1次

BA:2%11=2   1次

TN:20%11=9   1次

M:13%11=2 已被占据,放在3;                2次

CI:3%11=3 已被占据,放在4;4已被占据放在5   3次

I:9%11=9 已被占据,放在10                    2次

K:11%11=0                                    1次

X:24%11=2 已被占据放在3 已被占据放在4 已被占据放在5 已被占据放在6   5次

TA:20%11=9 已被占据放在10 已被占据放在0 已被占据放在1               4次

所以平均查找长度为(1+1+1+2+3+2+1+5+4)/9 = 20/9

 

 

总结:

 

采用开放定址法处理散列表的冲突时,其平均查找长度高于链接法处理冲突

链接法其中优点有: 
1
、链接法处理冲突简单,且无堆积现象,即非同义词决不会发生冲突,因此平均查找长度较短
2
、由于链接法中各链表上的结点空间是动态申请的,故它更适合于造表前无法确定表长的情况。

开放寻址法不用指针,潜在地节约了空间,用这些空间可存放更多的槽,从而潜在地减少了冲突,提升了速度。

 

 

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

开放寻址法

开始之前先引用一个牛人对开放寻址法的介绍,http://blog.csdn.net/shaobingj126/article/details/8156675。在此基础上,本文进行更为准确更为恶心地补充...

牛人解释哈希的开放寻址法

牛人解释哈希的开放寻址法 除了链表法,还有开放寻址法用来解决冲突。     简单地讲,也就是说,一间厕所,来了一个顾客就蹲其对应的位置,如果又来一个顾客,把厕所单间门拉开,一看里 面有位童鞋...

算法导论11.4开放寻址法 练习总结

11.4-1 考虑将关键字 10、22、31、4、15、28、17、88、59用开放寻址法插入到一个长度为 m = 11 的散列表中,辅助散列函数为 h'( k ) = k mod m。试说明分别...
  • chan15
  • chan15
  • 2015年09月24日 17:03
  • 1062

《算法导论》第11章 散列表 (3)开放寻址

前一节介绍是最简单的冲突解决方法-链接法。开放寻址与链接法不同,所有元素都放在散列表内。 在这种方法中,散列表可能会被填满。开放寻址不需要指针,只需要计算出要存取的各个槽。 由于不用存储指针而节省...
  • dc_726
  • dc_726
  • 2012年03月12日 21:34
  • 2248

C++数据结构--.哈希表线性探测开放寻址法与独立表链地址法

1.哈希函数是个定位函数,它用键作为参数,返回表中的索引值   2.线性探测开放寻址法   *调用哈希函数处理键得到哈希值,用值除以表的长度后取余数,从而确定表中的一个位置   *如果该位置非空...

散列表之链接法

散列表之链接法 散列表的定义 散列表的基本操作 散列表的编码实现 散列表的设计 主测试文件 编译运行 结论注意: 本文中的所有代码你可以在这里 https://github.com/qeesung...

解决哈希表的冲突-开放地址法和链地址法

在实际应用中,无论如何构造哈希函数,冲突是无法完全避免的。1 开放地址法 这个方法的基本思想是:当发生地址冲突时,按照某种方法继续探测哈希表中的其他存储单元,直到找到空位置为止。这个过程可用下式描述:...

哈希表详解

先来看一个TopK题目: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。 假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千...

常用数据结构的时间复杂度

常用数据结构的时间复杂度 Data Structure Add Find Delete GetByIndex Array (T[]) ...

哈希表总结

哈希表的概念         哈希表(Hash Table)也叫散列表,是根据关键码值(Key Value)而直接进行访问的数据结构。它通过把关键码值映射到哈希表中的一个位置来访问记录,以加快查找的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[数据结构]散列表-链接法和开放寻址法 线性探查
举报原因:
原因补充:

(最多只允许输入30个字)