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

解决哈希冲突(四种方法)[通俗易懂]一、了解哈希表及哈希冲突哈希表:是一种实现关联数组抽象数据类型的数据结构,这种结构可以将关键码映射到给定值。简单来说哈希表(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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SHFileOperation的用法

    SHFileOperation的用法VC移动,复制,删除文件(SHFileOperation) 总结一下SHFileOperation的用法,希望对大家有用//删除文件或者文件夹boolDeleteFile(char*lpszPath){SHFILEOPSTRUCTFileOp={0};FileOp.fFlags=FOF_ALLOWUNDO|  //允许放回回收站     FOF_NOCONFIRMA

    2022年7月18日
  • pycharm安装pandas「建议收藏」

    pycharm安装pandas「建议收藏」在控制台输入pipinstallpandas后出现Requirementalreadysatisfied之后按照下面的步骤安装就可以了。安装完成后importpandas就不会报错了。

    2022年8月25日
  • 反射式dll注入「建议收藏」

    反射式dll注入「建议收藏」前不久实现了经典dll注入exe,实现注入到用户层面进程,比如notepad.exe和wps.exe。(像金山毒霸kxetray.exe有自我保护机制也注入不进去)。由于对会话隔离注入不太了解,怕搞坏主机,没有再去实现注入到系统进程中。最近在网上看到dll反射注入,想把学习总结的笔记给大家分享一下。首先什么是反射式注入?它和传统经典注入有什么区别呢?我这里作个比喻。经典式:在别人的内存里调用…

    2022年5月17日
  • 怎样安装pip_pip 安装本地python包

    怎样安装pip_pip 安装本地python包网上有各种方法安装pip,针对不同的系统方法还不一样,最后发现还是下面这种方法最简单,直接了当干脆方便,适用于Windows和Linux。(1)下载pip进入https://pypi.python.org/pypi/pip,下载第二项。(2)解压安装解压下载的文件(windows下只用解压工具解压如RAR,Linux下终端输入tar-xfpip-9.0.1.tar.gz,即tar-xf文件名

    2022年10月27日
  • 无刷直流电动机驱动控制系统_直流无刷电机驱动电路

    无刷直流电动机驱动控制系统_直流无刷电机驱动电路无刷直流电动机利用电子开关线路和位置传感器来代替有刷直流电机电刷和换向器,使其同时具有直流电动机和交流电动机的优良特性。无刷直流电机(驱动系统)主要由电动机本体、位置传感器、电子开关线路三部分组成。

    2022年10月21日
  • Vue学习笔记-day01

    Vue学习笔记-day01

    2021年7月12日

发表回复

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

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