简单理解哈希表

哈希表

  • 哈希表也叫散列表,哈希表是一种数据结构,它提供了快速的插入操作和查找操作,无论哈希表总中有多少条数据,插入和查找的时间复杂度都是为O(1)
    • 散列函数计算得到的散列值是一个非负整数
    • 如果 key1 = key2,那 hash(key1) == hash(key2)
    • 如果 key1 ≠ key2,那 hash(key1) ≠ hash(key2)

1. 哈希函数

  • 除留余数法 Hash(key)=key MOD p (p<=m m为表长)//MOD 取模运算 6%10=6
  • 直接定制法 取关键字的某个线性函数为散列地址 Hash(Key)= A*Key + B
  • 平方取中法 关键字的每一位都有某些数字重复出现频率很高的现象,可以先求关键字的平方值,通过平方扩大差异,而后取中间数位作为最终存储地址

2. 哈希冲突

  • 从前向后插入数据,如果插入位置已经占用,发生冲突,冲突的另起一行,计算地址,直到地址可用,后面冲突的继续向下另起一行。最终结果取最上面的数据(因为是最“占座”的数据)
  • 伪随机数列di,产生的Hi(地址)均不相同,且所产生的s(m-1)个Hi能覆盖hash表中的所有地址

2.1 线性探测再散列

  • 冲突后存储在冲突后一个位置,如果仍然冲突继续向后 di=c∗i
    在这里插入图片描述

2.2 平方探测再散列

  • di=12,-12,22,-22

在这里插入图片描述

2.3 随机探测在散列

  • H(key)=(H(key)+di)MOD m ;di=key MOD 10 +1
    在这里插入图片描述

2.4 链地址法

  • 产生hash冲突后在存储数据后面加一个指针,指向后面冲突的数据

在这里插入图片描述

3. hash表的查找

  • 对于给定的key,计算hash地址index = H(key)
  • 如果数组arr【index】的值为空 则查找不成功
  • 如果数组arr【index】== key 则查找成功
  • 否则使用冲突解决方法求下一个地址,直到arr【index】== key或者 arr【index】==null

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值