数据结构中处理散列冲突的四种方法

news2025/1/24 7:10:45

1 开放定址法

1.1 定义

开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址

1.2 要求

只要散列表足够大

空的散列地址总能找到,并将记录存入

1.3 线性探测法

在这里插入图片描述

使用该公式用于解决冲突的开放定址法称为线性探测法

对于线性探测法,在出现冲突时,它只能晚后一步一步检测看是否有空位置

假设此时该冲突位置后续没有可用位置,但前面有一个空位置

尽管可以不断地求余数后得到结果,但效率很差

1.4 二次探测法

因此可以改进该算法,增加双向寻找可能的空位置,这种新算法称为二次探测法:

在这里插入图片描述

1.5 随机探测法

此外还有一种方法是,在冲突时,对于位移量di采用随机函数计算得到,我们称为随机探测法

在这里插入图片描述
注意

这里的随机其实是伪随机数

即设置相同的随机种子,则不断调用随机函数的过程中就可以生成不会重复的数列

同时,在查找时,用同样的随机种子,它每次得到的数列也是相同的

因此相同的di就可以得到相同的散列地址

2 再散列函数法

2.1 散列函数

即提供多个散列函数
在这里插入图片描述

2.2 解释

这里的RHi就是不同的散列函数然后每当发生散列地址冲突时

就换一个散列函数计算

相信总会有一个可以把冲突解决掉(todo:: how to search??)

2.3 优点弊端

2.3.1 优点

这种方法能够使得关键字不产生聚集

2.3.2 弊端

当然,相应地也增加了计算的时间

3 链地址法

3.1 定义

将所有关键字为同义词(即哈希地址相同)的记录存储在一个单链表中,我们称这种表为同义词子表

在散列表中只存储所有同义词子表的头指针

3.2 优点弊端

3.2.1 优点

链地址法对于可能会造成很多冲突的散列函数来说

提供了绝不会出现找不到地址的保障

3.2.2 弊端

当然,这也就带来了查找时需要遍历单链表的性能损耗

4 公共溢出区法

即为所有冲突的关键字建立一个公共的溢出区来存放

在查找时,对给定值通过散列函数计算出散列地址后先与基本表的相应位置进行比对如果相等,则查找成功如果不相等,则到溢出表去进行顺序查找如果对于基本表而言,有冲突的数据很少的情况下

公共溢出区的结构对查找性能来说还是非常高的

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rpc原理与应用

IPC和RPC? TCP是有三个特点,面向连接、可靠、基于字节流。粘包问题 RPC 而RPC(Remote Procedure Call),又叫做远程过程调用。它本身并不是一个具体的协议,而是一种调用方式。 gRPC 是 Google 最近公布的…

GPT4停止订阅付费了怎么办? 怎么升级ChatGPT plus?提供解决方案

11月中旬日OpenAI 暂时关闭所有的升级入口之后,很多小伙伴就真的在排队等待哦。其实有方法可以绕开排队,直接付费订阅升级GPT的。赶紧用起来立马“插队”成功!亲测~~~ 一、登录ChatGPT账号 1、没有账号可以直接注册一个,流程超级…

[足式机器人]Part2 Dr. CAN学习笔记-数学基础Ch0-5Laplace Transform of Convolution卷积的拉普拉斯变换

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-数学基础Ch0-5Laplace Transform of Convolution卷积的拉普拉斯变换 Laplace Transform : X ( s ) L [ x ( t ) ] ∫ 0 ∞ x ( t ) e − s t d t X\left( s \right) \mathcal{L} \left[ x\lef…

php 接入 百度编辑器

按照github上的操作下载百度编辑器的包后,根据文档上的步骤操作(可能会遇到报错): 1、git clone 仓库 2、npm install 安装依赖(如果没有安装 grunt , 请先在全局安装 grunt) 我的是报了下面的错&#…

Graphpad Prism10.1.0 安装教程 (含Win/Mac版)

GraphPad Prism GraphPad Prism是一款非常专业强大的科研医学生物数据处理绘图软件,它可以将科学图形、综合曲线拟合(非线性回归)、可理解的统计数据、数据组织结合在一起,除了最基本的数据统计分析外,还能自动生成统…

智慧工地安全管理方案,智慧工地云平台源码,java项目源码

智慧工地安全管理方案,智慧工地云平台源码 智慧工地是一种以信息技术为手段,全面提升建筑施工过程的管理水平、提高工程质量和安全、降低工程成本和风险、提高施工效率和管理水平的智能化技术和系统。通过物联网、互联网、大数据、云计算等技术的应用&a…

Vue.js实现可编辑表格并高亮修改的单元格

实现一个可编辑的表格,让用户可以修改表格中的数据,并且能够清楚地看到哪些单元格被修改过。这样的功能可以提高用户体验,也方便后端处理数据的变化。 本文将介绍如何使用Vue.js和Element UI的el-table组件来实现一个可编辑表格,…

课堂练习3.1:进程的描述与状态

3-1 进程是操作系统中一个非常重要的概念。程序的运行是通过进程来完成的。在层次结构的操作系统中,进程不仅是系统分配资源的基本单位,而且是 CPU 调度的基本单位。进程管理是操作系统最重要的功能之一。 通过本实训将会学习到:Linux 0.11 …

C#如何使用SqlSugar操作MySQL/SQL Server数据库

一. SqlSugar 连接MySQL数据库 public class MySqlCNHelper : Singleton<MySqlCNHelper>{public static SqlSugarClient CnDB;public void InitDB() {//--------------------MySQL--------------------CnDB new SqlSugarClient(new ConnectionConfig(){ConnectionString…

谈谈 LLM 在推荐域的渗透,探索推荐新范式

搜索慢慢的被大模型渗透&#xff0c;那么很自然很多人想到了推荐&#xff0c;但是推荐是不是真的可以被大模型渗透呢&#xff1f;大模型能改变推荐的范式吗&#xff1f; 最近大模型真的很火&#xff0c;从个人到公司&#xff0c;各行各业都在学习大模型、总结大模型和尝试应用…

SpringBoot项目静态资源默认访问目录

SpringBoot项目&#xff1a;静态资源默认访问目录 参考博客&#xff1a;https://blog.csdn.net/weixin_43808717/article/details/118281904

Brushed DC mtr--PIC

PIC use brushed DC mtr fundmental. Low-Cost Bidirectional Brushed DC Motor Control Using the PIC16F684 DC mtr & encoder

iOS——UIPickerView选择器

UIPickerView UIPickerView是 iOS 开发中常用的用户界面组件之一&#xff0c;用于在垂直方向上显示一个滚动的列表&#xff0c;用户可以通过滚动选择其中的一项。 UIPickerView的协议方法 UIPickerView和UItableView差不多&#xff0c;UIPickerView也要设置代理和数据源。UI…

【Effective C++】条款7:为多态基类声明virtual析构函数

如果你实现的一个类打算作为基类&#xff0c;并且要实现多态&#xff0c;那么就应该将析构函数声明为virtual。 class TimeKeeper { public:TimeKeeper();~TimeKeeper(); }; TimeKeeper::TimeKeeper() {cout << "TimeKeeper构造" << endl; } TimeKeeper:…

修改移远提供的GobiNet、quectel-CM源码,使其支持有方N720 4G模块

最近在研究imx6ull linux下4G模块驱动的移植&#xff0c;参考的移远ec20的移植方法&#xff0c;添加了GobiNet驱动&#xff0c;编译了quectel-CM工具&#xff0c;并且可以正常拨号&#xff0c;分配到ip&#xff0c;如下&#xff1a; ping外网也没有压力&#xff0c;如下…

MySQL之数据库及表操作

MySQL之数据库及表操作 文章目录 MySQL之数据库及表操作一、数据库的基本结构二、数据库的创建和删除三、数据表的结构定义和操作四、数据的插入五、主键和自增长属性1、什么是主键2、自增长属性 一、数据库的基本结构 数据库系统由数据库服务器为载体&#xff0c;拥有一个或者…

实用篇 | 一文学会人工智能中API的Flask编写(内含模板)

----------------------- &#x1f388;API 相关直达 &#x1f388;-------------------------- &#x1f680;Gradio: 实用篇 | 关于Gradio快速构建人工智能模型实现界面&#xff0c;你想知道的都在这里-CSDN博客 &#x1f680;Streamlit :实用篇 | 一文快速构建人工智能前端展…

class063 双向广搜【算法】

class063 双向广搜【算法】 算法讲解063【必备】双向广搜 code1 127. 单词接龙 // 单词接龙 // 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 // 是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> … -> sk &#xff1a; // 每一对相邻的单词只…

听GPT 讲Rust源代码--src/tools(10)

File: rust/src/tools/rust-analyzer/crates/ide-assists/src/handlers/generate_is_empty_from_len.rs 在Rust源代码中&#xff0c;rust-analyzer是一个Rust语言的IDE插件和代码分析器。其中&#xff0c;generate_is_empty_from_len.rs是rust-analyzer中的一个处理程序&#x…

超声波清洗机可以清洗什么?2023年超声波清洗机推荐

之前跟朋友聊天了解到&#xff0c;他作为一个眼镜党&#xff0c;竟然不知道要清洗自己的眼镜&#xff0c;如果眼镜长时间不清洗的话&#xff0c;很容易细菌感染并且导致眼睛酸痛&#xff0c;这是一个弊端&#xff0c;还有就是如果不正确清洗眼镜方法也很容易导致眼镜被刮花&…