微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

简单理解哈希表

哈希表

  • 哈希表也叫散列表,哈希表是一种数据结构,它提供了快速的插入操作和查找操作,无论哈希表总中有多少条数据,插入和查找的时间复杂度都是为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

原文地址:https://www.jb51.cc/wenti/3287322.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐