散列表总结

散列表本质思想

  • 目的:兼顾空间与时间的高效性
  • 实现逻辑:以最基本的向量作为底层支撑结构,通过适当的散列函数,在词条的关键码和向量的秩之间建立起映射关系(循值访问)
  • 实现结果:
  • 散列表:底层逻辑,存放词条的单元/桶单元,桶单元按其逻辑顺序在物理上连续排列(散列表——>桶数组)
  • 散列函数:词条与桶地址之间约定的某种映射关系(key的散列地址=hash(key))
  • 冲突排解策略
  • 三者——>设计得当,散列技术在期望的常数时间内实现词典的所有接口操作
  • 词条数n,关键码范围r,散列表长m:r >> m > n

回答问题:散列表长的设计原则

  • 逻辑联系
散列函数/映射函数的设计原则
  • 必须确定/映射地址完全取决于其关键码,自身不能过于复杂/O(1)操作,尽量覆盖整个地址空间/充分利用有限空间
  • 不可能是单射:r>>m
  • 关键码映射到桶的概率尽量为1/m:随机性越强,规律性越弱越好
  • 实际手段:先验地消除可能导致地关键码分布不均匀的因素,最大限度地模拟理想的随机函数
散列函数的设计案例:
  • 除余定址法:散列表长度取作素数
  • MAD定址法
散列冲突排解:找到空桶,找不到也能停止即为基本要求
  • 闭散列:
  • 多槽位,独立链
  • 平放试探法:M为素数且装填因子<50%满足能够找到空位
  • 开散列(开放定址):
  • 线性试探法
综上,散列表长的设计原则:
  • hash函数的设计原则:先验地消除可能导致地关键码分布不均的因素,尽可能地避免冲突
  • 除余定址法:M为素数的原则
  • 取模运算的冲突与模的因子相关(用等差数列验证,数列的间隔为模的因子大小时,冲突的可能性增大——>随机数列而言,模的因子更多,产生的冲突可能性就越大),素数取模的结果分布更均匀,冲突概率更小,所以选择素数作为比表长尽可能减少冲突发生符合设计原则
  • 冲突排解的方法:平放试探法
  • 散列表长:素数且装填因子满足<=50%时,能够找到空桶(结论1)
  • 冲突排解的方法:双平方试探法
  • 散列表长:素数且为4k+3,必然可以保证:查找链的前M项均互异,能够找到空桶(结论2)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值