hash冲突四种解决办法,hash冲突除了拉链法还有什么?

1. 看hashmap 源码,有个问题,key 存放是 先hash 再与hash值的高16位值  进行异或运算。再与槽位size() 求模取余。如果多个不同的key 得出de数组位置相同。则采用链表依次存储。

2. 那么除了拉链法还有什么其他解决hash冲突的方法呢?

    a. 建立公共溢出区

chatgpt3.5 answer:        

建立公共溢出区是一种处理哈希冲突的方法,它将所有哈希冲突的元素都放置在同一个溢出区中。这种方法可以简化哈希表的实现,但在查找和插入时需要额外的逻辑操作。

下面是建立公共溢出区的详细介绍:

  1. 初始化哈希表和公共溢出区:首先,初始化一个固定大小的哈希表和一个公共溢出区,用于存放所有哈希冲突的元素。

  2. 哈希函数计算位置:当要插入一个元素时,通过哈希函数计算该元素应该存放的位置。

  3. 检查位置:检查计算出的位置是否已经被其他元素占据。

  4. 处理冲突

    • 如果位置为空,则直接将元素插入该位置。
    • 如果位置已被占据:将新元素添加到公共溢出区中。
  5. 查找元素:当查找元素时,先在哈希表中查找,如果未找到,则再在公共溢出区中查找。

  6. 动态调整:随着元素的插入和删除,公共溢出区的大小可能需要动态调整,以保持合理的性能。

      使用公共溢出区的优点是简化了哈希表的实现,所有哈希冲突的元素都集中在一个地方,管理起来相对容易。然而,由于所有冲突元素都放在同一个区域,可能会导致这个区域的负载过重,影响查找和插入的效率,因此在设计时需要考虑如何平衡元素的分布。

总的来说,建立公共溢出区是一种处理哈希冲突的方法,适用于一些简单的应用场景,但在高负载情况下可能需要额外的优化和调整。

  b. rehash()

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

 c. 链式地址法

     hashMap 采用的就是此种,拉链法:数组中,每个位置都存储一个链表。hash相同,则依次存入链表内

d.  开放地址法

    

当哈希表中出现哈希冲突时,开放寻址法是一种解决冲突的方法。它的主要思想是在发生冲突时,顺序地探查哈希表中的下一个位置,直到找到一个空闲的位置或者探查完整个哈希表。

开放寻址法通常有以下几种方式:

  1. 线性探测(Linear Probing):当发生哈希冲突时,顺序地检查下一个位置,直到找到一个空闲位置或者探查到了整个哈希表。新的元素会被插入到第一个空闲位置。

  2. 二次探测(Quadratic Probing):根据一个固定的增量序列来探测下一个位置,而不是简单地逐个检查。例如,第一次探测的增量是1,第二次是4,第三次是9,依此类推。

  3. 双重散列(Double Hashing):使用第二个哈希函数来计算探测的步长,而不是使用固定的增量序列。这样可以避免产生线性探测中的“聚集”现象。

无论使用哪种探测方法,开放寻址法都需要考虑以下问题:

  • 删除操作:在开放寻址法中删除元素时,不能简单地将对应的位置标记为空,因为这可能会影响后续查找其他元素的过程。一种解决方法是使用特殊的标记来表示该位置曾经存储过元素。

  • 装载因子:开放寻址法的装载因子(已占用位置数与总位置数的比值)不能太大,否则会导致探查时间过长。通常情况下,需要及时进行扩容操作来保持合理的装载因子。

开放寻址法相对于链地址法的优势在于内存访问更加连续,从而可以更好地利用 CPU 缓存,但它也需要更多的空间来解决哈希冲突。选择合适的哈希冲突解决方法取决于具体的应用场景和需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/486275.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【学习】Web安全测试需要考虑哪些情形

一、数据加密 某些数据需要进行信息加密和过滤后才能在客户端和服务器之间进行传输,包括用户登录密码、信用卡信息等。例如,在登录某银行网站时,该网站必须支持SSL协议,通过浏览器访问该网站时,地址栏的http变成https…

堂哥让我给他做个真人动漫头像

背景 堂哥最喜欢的动漫是死神。他给了我一张死神主角一户的头像,以及自己的头像,希望我产出一张真人动漫头像。 一户的头像: 堂哥自拍照: 最近,有大佬部署了个stable diffusion,正好拿来一试身手。 stab…

vue项目报这个错是 Same `value` exist in the tree: 0008E3000E1A?

警告 "Same value exist in the tree: 0008E3000E1A" 表示在树形选择器中存在相同的值。这通常是由于树形选择器的数据中存在重复的值造成的。就是返回的值中,有俩个id相同

【Redis】数据类型、事务执行、内存淘汰策略

目录 数据类型 Redis事务执行步骤 步骤: redis内存淘汰策略 设置内存淘汰策略 1.设置配置文件 2.通过命令设置 数据类型 官网解释 Understand Redis data types | Redis 首先,Redis 的所有键都是字符串,常用的数据类型有 5 种:Strin…

快速上手 Elasticsearch:Docker Compose 部署详解

最近面试竞争日益激烈,Elasticsearch作为一款广泛应用的中间件,几乎成为面试中必考的知识点。最近,AIGC也备受关注,而好多的AI项目中也采用了Elasticsearch作为向量数据库,因此我们迫切希望学习Elasticsearch。对于学习…

【机器学习】基于变色龙算法优化的BP神经网络分类预测(SSA-BP)

目录 1.原理与思路2.设计与实现3.结果预测4.代码获取 1.原理与思路 【智能算法应用】智能算法优化BP神经网络思路【智能算法】变色龙优化算法(CSA)原理及实现 2.设计与实现 数据集: 数据集样本总数2000 多输入多输出:样本特征24&#xff…

工业4.0 底层逻辑

许多场合下,工业4.0 的概念已经被滥用了,它与物联网,工业物联网等概念被滥用一样,几乎什么都往里面装。演变成了一句口号和愿景。许多人并不清楚工业4.0的底层逻辑到底是什么?如何遵循工业4.0 的思想构建新一代智能制造…

社交媒体行业巨头:揭示Facebook的市场地位

引言 随着数字化时代的蓬勃发展,社交媒体已经深刻改变了人们的生活方式和社会交往方式,而Facebook作为其中的领军者,扮演着举足轻重的角色。本文将深入探讨Facebook在社交媒体行业中的市场地位,从用户规模、收入来源、技术创新、…

【Android】美团组件化路由框架WMRouter源码解析

前言 Android无论App开发还是SDK开发,都绕不开组件化,组件化要解决的最大的问题就是组件之间的通信,即路由框架。国内使用最多的两个路由框架一个是阿里的ARouter,另一个是美团的WMRouter。这两个路由框架功能都很强大&#xff0…

智能运维的发展演进

Gartner在2018年提出AIOps(Artificial Intelligence for IT Operations),即人工智能在IT运维领域的应用。智能运维在技术方案、平台、场景都更加聚焦,恰逢AI技术飞速发展。用户可以实时监控分析大量的运维数据,预防和防…

python + tensorflow 开局托儿所自动点击脚本

python开局托儿所自动点击脚本 屏幕截图图片数字识别消除算法自动点击 屏幕截图 python 屏幕截图可以使用pyautogui或者PIL。我使用的是PIL中的ImageGrab(要授权)。 image ImageGrab.grab(bbox(0, 0, tool.static_window_width, tool.static_window_height)) image np.arra…

ModbusRTU/TCP/profinet网关在西门子博图软件中无法连接PLC的解决方法

ModbusRTU/TCP/profinet网关在西门子博图软件中无法连接PLC的解决方法 在工业生产现场,ModbusRTU/TCP/profinet网关在与西门子PLC连接时,必须要使用西门子的博图软件来进行配置,博图v17是一个集成软件平台,专业版支持300、400、12…

海外基金牌照的优势及注意事项-华媒舍

一、了解海外基金牌照 在投资领域,海外基金牌照是指投资者可以通过获得海外金融监管机构颁发的许可证,参与海外基金投资。拥有海外基金牌照的投资者可以享受更广泛的投资机会,包括跨境投资、全球资产配置等。 二、海外基金牌照的优势 多元化…

Unity 学习日记 8.2D物理引擎

1.2D刚体的属性和方法 2.碰撞器

还在购买蜘蛛池做SEO?有用吗?

蜘蛛池是什么?租用蜘蛛池对SEO优化到底有没有用?网上很多说法,且各执一词,那些出租蜘蛛池的写的软文不算。站长帮一直本着负责任的态度,从客观的角度,来为大家一一解惑。 本文 虚良SEO 原创,转载…

如何查询网贷大数据信用报告?哪个查询平台更好?

在互联网金融迅速发展的当下,网贷大数据查询平台已成为许多人在申请贷款前的重要工具。然而,随着这些平台的广泛使用,安全问题日益凸显,许多用户反映自己的个人信息在查询过程中被泄露。为了应对这一挑战,本文将探讨如…

fiddler配合夜神模拟器对APP进行抓包

fiddler 配置 设置https Tools – -> Options —> HTTPS 在这里插入图片描述 下载证书,并安装 修改模拟器网络连接 cmd 查看本机本地IP点击模拟器wifi, 长按修改为手动配置: IP 8888使用浏览器,访问IP 8888 下载证书 。点击Fiddler…

RabbitMQ详细讲解

目录 4.0 AMQP协议的回顾 4.1 RabbitMQ支持的消息模型 4.2 引入依赖 4.3 第一种模型(直连) 1. 开发生产者 2. 开发消费者 3. 参数的说明 4.4 第二种模型(work quene) 1. 开发生产者 2.开发消费者-1 3.开发消费者-2 4.测试结果 5.消息自动确认机制 4.5 第三种模型(…

【力扣白嫖日记】1069.产品销售分析II

前言 练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。 今日题目: 1069.产品销售分析II 表:Sales 列名类型sale_idintproduct_idintyearintquantityintpriceint s…

【Redis】Redisson实现分布式锁

Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务,其中就包含了各种分布式锁的实现。 官网地址 GitHub地址 Redisson入门 1.引…