哈希表
- 哈希表也叫散列表,哈希表是一种数据结构,它提供了快速的插入操作和查找操作,无论哈希表总中有多少条数据,插入和查找的时间复杂度都是为O(1)
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 举报,一经查实,本站将立刻删除。