数据结构中的散列表(散列函数、哈希函数)存储结构

数据结构中的散列表(散列函数、哈希函数)存储结构

散列表(Hash table)

  • 概念:根据关键字的值来计算出关键字在表中的地址,也即地址是关键字的函数

哈希函数的构造方法

  1. 直接定址:

    取关键字或关键字的某个线性函数为Hash地址,即
    H( key )=key 或者 H( key ) = a*key + b

  2. 数字分析法:
    前提是你的关键字解释数字,然后从中取出某些位来作为关键字的地址,取出哪些位作为关键字的地址即为分析过程
    (适用于关键字的位数比较多,且表中可能的关键字都是已知的情况)

    例:电话号码为关键字
    180******1234 电话号码前7位相等的概率是很大的,如果电话号码是关键字,用数字分析法给电话号码确定哈希地址的话,取后四位比较好

  3. 平方取中法:
    取关键字平方后的中间几位作为hash地址,一个数平方后的中间几位数和数的每一位都相关 由此得到的hash地址随机性更大

    例 : 123
    (123)^2 =15129 ------------ 取512作为其哈希地址

  4. 除留余数法(最常用的方法):
    取关键字被某个不大于Hash表表长的数p除后所得的余数为Hash地址,即
    例:H(key)= key mod p (p<=len(表))

哈希表常见的冲突处理方法

  • 开放定址法:
    - 线性探查法
    Hi(key) = (H(key) +i ) Mod len(表)
    特点:可以探测到表中所有位置,但是易产生推积问题

    -平方探查法
    设发生冲突的地址为d,则探测到的新地址为:d +/- ( i^2) <= length-1
    d+12 、 d-12、 d+22、 d-22、d+32……
    特点:不可以探测到表中的所有位置,但是至少可以探测到一半的位置,不易产生堆积问题。

  • 链地址法:
    特点:数组中装的是指针,每个地址冲突的关键字依次挂在数组某一位置的链表指针下在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值