解决哈希冲突(四种方法)[通俗易懂]

解决哈希冲突(四种方法)[通俗易懂]一、了解哈希表及哈希冲突哈希表:是一种实现关联数组抽象数据类型的数据结构,这种结构可以将关键码映射到给定值。简单来说哈希表(key-value)之间存在一个映射关系,是键值对的关系,一个键对应一个值。哈希冲突:当两个不同的数经过哈希函数计算后得到了同一个结果,即他们会被映射到哈希表的同一个位置时,即称为发生了哈希冲突。简单来说就是哈希函数算出来的地址被别的元素占用了。二、解决哈希冲突办法1、开放定址法:我们在遇到哈希冲突时,去寻找一个新的空闲的哈希地址。举例:就是当我们去教室上课..

大家好,又见面了,我是你们的朋友全栈君。

目录

一、了解哈希表及哈希冲突

 二、解决哈希冲突办法 

1、开放定址法:我们在遇到哈希冲突时,去寻找一个新的空闲的哈希地址。

(1)线性探测法

         (2)平方探测法(二次探测)

 2、再哈希法

3、链地址法:将所有哈希地址相同的记录都链接在同一链表中。

4、建立公共溢出区:将哈希表分为基本表和溢出表,将发生冲突的都存放在溢出表中。


一、了解哈希表及哈希冲突

哈希表:是一种实现关联数组抽象数据类型的数据结构,这种结构可以将关键码映射到给定值。简单来说哈希表(key-value)之间存在一个映射关系,是键值对的关系,一个键对应一个值。

哈希冲突:当两个不同的数经过哈希函数计算后得到了同一个结果,即他们会被映射到哈希表的同一个位置时,即称为发生了哈希冲突。简单来说就是哈希函数算出来的地址被别的元素占用了。


 二、解决哈希冲突办法 

1、开放定址法:我们在遇到哈希冲突时,去寻找一个新的空闲的哈希地址。

举例:就是当我们去教室上课,发现该位置已经存在人了,所以我们应该寻找新的位子坐下,这就是开放定址法的思路。如何寻找新的位置就通过以下几种方法实现。

(1)线性探测法

        当我们的所需要存放值的位置被占了,我们就往后面一直加1并对m取模直到存在一个空余的地址供我们存放值,取模是为了保证找到的位置在0~m-1的有效空间之中。

公式:h(x)=(Hash(x)+i)mod (Hashtable.length);(i会逐渐递增加1)

举例:

解决哈希冲突(四种方法)[通俗易懂]

 存在问题:出现非同义词冲突(两个不想同的哈希值,抢占同一个后续的哈希地址)被称为堆积或聚集现象。

        (2)平方探测法(二次探测)

                 当我们的所需要存放值的位置被占了,会前后寻找而不是单独方向的寻找。

        公式:h(x)=(Hash(x) +i)mod (Hashtable.length);(i依次为+(i^2)和-(i^2))

        举例:

解决哈希冲突(四种方法)[通俗易懂]


 2、再哈希法:同时构造多个不同的哈希函数,等发生哈希冲突时就使用第二个、第三个……等其他的哈希函数计算地址,直到不发生冲突为止。虽然不易发生聚集,但是增加了计算时间。


3、链地址法:将所有哈希地址相同的记录都链接在同一链表中。

公式:h(x)=xmod(Hashtable.length);

解决哈希冲突(四种方法)[通俗易懂]

 


4、建立公共溢出区:将哈希表分为基本表和溢出表,将发生冲突的都存放在溢出表中。

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150135.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • snmptrap 命令解析「建议收藏」

    snmptrap 命令解析「建议收藏」example:#snmptrap-v2c-cpublic10.10.12.219″aaa”1.3.6.1.4.1.2345SNMPv2-MIB::sysLocation.0s”justhere” snmptrap命令-v2cSnmp协议版本-cpublic共同体10.10.12.

    2022年8月20日
    6
  • js实现input的赋值

    js实现input的赋值

    2021年11月8日
    37
  • native/ascii在线转换工具_中文转ascii

    native/ascii在线转换工具_中文转ascii1,原理Property文件中,使用的编码根据机器的设置可能是GBK或者UTF-8。而在Java中读取Property文件时使用的是Unicode编码,编码方式不同会导致中文乱码,因此需要将Property文件中的中文字符转化成Unicode编码才能正常显示中文。2,解决办法Java提供了native2ascii这种专门的工具对Property文件进行编码转换,在JDK安装环境的bin目录下可以找…

    2025年10月26日
    2
  • intelj 2021 激活码(注册激活)[通俗易懂]

    (intelj 2021 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlMLZPB5EL5Q-eyJsaWN…

    2022年3月21日
    55
  • skinsdog 狗网CSGO饰品皮肤开箱网站可直接取回[通俗易懂]

    skinsdog 狗网CSGO饰品皮肤开箱网站可直接取回[通俗易懂]skinsdog狗网CSGO饰品皮肤开箱网站可直接取回官方链接:skinsdog.cc注册登录自动免费获得$0.8美金推广码:csgogo(注册使用送0.8美金)支付:微信支付宝状态:直接取回

    2022年9月1日
    3
  • 关于机械臂的模仿学习

    关于机械臂的模仿学习文章目录1.关键词2.数据集3.框架4.大会/论坛5.相关论文1.关键词模仿学习:Imitationlearning2.数据集图像识别领域的数据集:ImageNet目标检测的数据集:COCO机器问答的数据集:SQuAD3.框架斯坦福的李飞飞实验室,开源了分布式强化学习训练框架SURREAL,用来加速学习过程。团队还发现,用SURREAL框架搭配上文的RoboTurk…

    2022年9月19日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号