散列表的性能分析

1 前言

  • 平均查找长度(ASL)用来度量散列表查找效率:成功、不成功
  • 关键词的比较次数,取决于产生冲突的多少

影响产生冲突多少有以下三个因素:
(1)散列函数是否均匀;
(2)处理冲突的方法;
(3)散列表的装填因子α。
分析:不同冲突处理方法、装填因子对效率的影响

2 线性探测法的查找性能

可以证明,线性探测法的期望探测次数 满足下列公式:
在这里插入图片描述
当α= 0.5时,
插入操作和不成功查找的期望 ASLu = 0.5*(1+1/(1-0.5) 2 ) = 2.5 次
成功查找的期望 ASLs = 0.5*(1+1/(1-0.5) ) = 1.5次

h(key)0123456789101112
key1130477299845420
冲突次数060010313

α= 9/13=0.69,于是
期望 ASLu = 0.5*(1+1/(1-0.69) 2 ) = 5.70次
期望 ASLs = 0.5*(1+1/(1-0.69) ) = 2.11次(实际计算ASLs =2.56)

根据公式算出来的只是一个期望值,顶部是实际的成功平均查找长度(ASLs)与不成功平均查找长度 (ASLu)

3 平方探测法和双散列探测法的查找性能

可以证明,平方探测法和双散列探测法探测次数 满足下列公式:
在这里插入图片描述
当α= 0.5时,
插入操作和不成功查找的期望 ASLu = 1/(1-0.5) = 2 次
成功查找的期望 ASLs = -1/0.5* ln(1-0.5) ≈ 1.39 次

h(key)012345678910
key1130204784729954
冲突次数033020100

α= 9/11=0.82,于是
期望 ASLu = 1/(1-0.82) ≈ 5.56次
期望 ASLs = -1/0.5* ln(1-0.5) ≈ 2.09次(例中ASLs =2)。

下面通过一个图更加直观的反应在不同的填充因子下,期望查找次数的变化。
在这里插入图片描述
从图中可以看到:
(1)当装填因子α< 0.5的时候,各种探测法的期望探测次数都不大,也比较接近。
(2)随着 α 的增大,线性探测法的期望探测次数增加较快,不成功查找和插入操作的期望探测次数比成功查找的期望探测次数要大。
(3)合理的的最大装入因子α应该不超过0.85。

4 分离链接法的查找性能

所有地址链表的平均长度定义成装填因子α,α有可能超过1。
其期望探测次数 p为:
在这里插入图片描述
当α = 1时
插入操作和不成功查找的期望 ASLu = 1+e-1 = 1.37 次,
成功查找的期望 ASLs = 1+1/2 = 1.5 次。

前面例子14个元素分布在11个单链表中,所以α= 14/11≈1.27, 故
期望 ASLu = 1.27+e-1.27 ≈ 1.55次
期望 ASLs = 1+1.27/2 ≈ 1.64次(例中ASLs =1.36)。

5 散列查找优缺点比较:

优点: 选择合适的 h(key) ,散列法的查找效率期望是常数O(1),它几乎与关键字的空间的大小n无关!也适合于关键字直接比较计算量大的问题

中性:它是以较小的α为前提。因此,散列方法是一个以空间换时间它是以较小的α为前提。因此,散列方法是一个以空间换时间

缺点:散列方法的存储对关键字是随机的,不便于顺序查找关键字,也不适合于范围查找,或最大值最小值查找。

开放地址法优缺点比较:
优点:散列表是一个数组,存储效率高,随机查找。
缺点:散列表有“聚集”现象

总结

  • 了解线性探测法,平方探测法,分离链表法的查找性能。
  • 了解散列查找优缺点
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值