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

在介绍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
、由于链接法中各链表上的结点空间是动态申请的,故它更适合于造表前无法确定表长的情况。

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

 

 

 

 

 

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lady_lili/article/details/52374248
个人分类: 数据结构
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭