散列表

在关键字范围远大于元素个数时,减少储存空间的大小。
关键字通过散列函数计算出相应的下标。
散列函数:尽量将每个关键字散列到所有的位置
装填因子α:表示平均储存元素。当需要插入的元素个数为n,散列表的槽位数为m。α=n/m

  • 链地址:相同的放在同一链表中
    • 最坏情况:全部在同一个槽,查找的时间复杂度为Θ(n)
    • 平均情况:计算的复杂度为O(1),在平均情况下,1次查找成功的复杂度为O(1+α)。如果n和m成正比,有α=O(1)。所以查找的复杂度为O(1)
  • 开放寻址法:发生冲突时按某种规则去寻找另一空地址。
    hi(x)=(h(x)+d) mod size
    不同的解决冲突方案的d不同
    性能分析:O(1)
    • 线性探测:d=i,每探查一次d+=1。
      可以想象1个环形数组,在除去第1次探测的位置外不断探查下一个位置。但是容易出现一次集群(随着连续的槽都被占用,查找时间不断增加)
    • 平方探测:d=i^2。可能会出现二次集群
    • 双散列:d=(H(x))*i 再设计1个散列函数

这里写图片描述
这里写图片描述
size被设置为11,
对于成功的查找次数,每个被插入的位置的冲突次数加1
对于不成功的查找次数,对于每个位置,例如33在3次后发现为空,说明不存在;对于key=7时,冲突后一直向后寻找到2。
散列表的查找复杂度和问题的范围无关。但是不适用于范围查找。
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值