美文网首页IT狗工作室
第10篇:C++哈希表-开放寻址--二次探测

第10篇:C++哈希表-开放寻址--二次探测

作者: 铁甲万能狗 | 来源:发表于2020-04-01 23:24 被阅读0次

我前一篇已经深入介绍了开放寻址技术的其中一种缓解散列冲突的策略,那就是线性探测(Linear Probing)的工作原理,我们本篇会继续介绍二次探测函数,事实上只要涉及到开放寻址,你不论使用什么探测函数,算法的逻辑主体是不会变,只是索引表达式中使用到P(x)不同而已。

二次探测函数 VS 线性探测

为什么需要二次探测策略呢?那么我们需要了解线性探测的缺点。现在我们通过一个具体的例子来说明一切。我们有一个长度为10的哈希表,在线性探测操作后,该表插入了8个键值对,如下图

  • 哈系表尺寸N=10
  • 线性探测函数P(x)=x


    ss8.png

这种线性探测带来的问题是已插入的元素开始出现堆积(clustering),即多个元素将开始在哈希表的某个区域多个元素项逐个挨着,这会带来什么问题呢?假设我想插入一个散列值为0的键值对(12,"Mandy"),那么线性探测函数P(x)就必须探测堆积区域中的索引0,1,2,3,4,5,直到探测到索引为6的存储桶为空才能插入散列值为0的键值对(12,"Mandy"),显然对于这种情况,线性探测的时间复杂度为O(n)

相关文章

  • 第10篇:C++哈希表-开放寻址--二次探测

    我前一篇已经深入介绍了开放寻址技术的其中一种缓解散列冲突的策略,那就是线性探测(Linear Probing)的工...

  • 第9篇:C++哈希表-开放寻址--线性探测

    本篇我们将深入讨论哈希表的冲突缓解技术之一 开放寻址中的其中一种策略-线性探测(Linear Probing)在开...

  • 数据结构

    哈希表ThreadLocal用的是开放寻址方法hashmap用链表法

  • 第8篇:C++哈希表-开放寻址原理

    承接上篇,在阅读本篇时你需要搞清如下几个问题 什么是哈希表(Hash Table)? 什么是键值对(Key-Val...

  • 哈希表与树的入门

    哈希表: 特点: 数组(顺序表):寻址容易 链表:插入与删除容易 哈希表:寻址容易,插入删除也容易的数据结构,也就...

  • 从零开始学数据结构和算法(四)哈希表的思想和二叉树入门

    哈希表 特点 数组(顺序表):寻址容易 链表:插入与删除容易 哈希表:寻址容易,插入删除也容易的数据结构 Hash...

  • day3 哈希表

    哈希表 是由数组跟链表组合而成的产物特点: 数组(顺序表)寻址容易 链表:插入删除容易 哈希表:寻址容易,插入删除...

  • 第11篇:C++哈希表-开放寻址--双重散列

    如果你阅读前面两篇的开放寻址,我们已经详细底介绍了开放寻址的其中一种缓解散列冲突的策略--线性探测(Leanar)...

  • HashMap面试基础

    HashMap 必备知识——哈希表 哈希表 哈希函数 哈希碰撞 解决办法 1. 拉链法 2. 线性探测法 Hash...

  • (1) 面试

    哈希算法处理冲突的机制: 1.开放寻址法2. 再散列法3. 链地址法(拉链法)4. 建立一个公共溢出区参考:哈希表...

网友评论

    本文标题:第10篇:C++哈希表-开放寻址--二次探测

    本文链接:https://www.haomeiwen.com/subject/nlxnuhtx.html