蓝桥备赛(19)- 哈希表和 unordered_ set 与unordered_map(上)

server/2025/3/15 8:07:10/

一、哈希表的概念

1.1 哈希表的定义

哈希表(hash table),又称散列表 是根据  关键字直接  进行访问的数据结构
哈希表建立了一种 关键字 存储地址 之间的 直接映射 关系,使每个关键字与结构中的 唯⼀存储位置相对应
理想情况下,在散列表中进行查找的时间复杂度为 O(1) 即与表中的元素数量无关。因此哈
希表是⼀种存储和查找非常快的结构。

举个例子:

1.2 哈希函数

关键字  映射   成对应的地址的函数就是哈希函数 ,也叫作散列函数,
记为 Hash(key) = Addr 
哈希函数的本质也是⼀个函数,它的作用是,你给它⼀个关键字,它给你一个该关键字对应的存储位置。

1.3 哈希冲突

哈希函数可能会把两个或两个以上的不同关键字映射到同一地址 ,这种情况称为哈希冲突,也称散列冲突。起冲突的不同关键字,称它们为同义词。

这里是 %7 出现了冲突, 那为什么不 %8 , %10 ?

二、常见的哈希函数

2.1 直接定址法

案例中,统计字符串中,小写字符出现的次数使用的方法,就是直接定址法
直接取关键字的某个线性函数值为散列地址 ,散列函数是 hash(key) = key 或 hash(key)= a× key + b 其中 a 与 b 为常数。这种方式计算比较简单,适合关键字的分布基本连续的情况,但是若关键字分布不连续,空位较多,则会造成存储空间的浪费。

 

2.2 除留余数法

哈希冲突那里的案例,所用的哈希函数就是除留余数法。
M 一般取质数(素数)

2.3 其他方法

上面的两种方法是《算法导论》书籍中讲解的方法,除此之外还有乘法散列法和全域散列法。
《殷人昆 数据结构:用面向对象方法与C++语言描述 (第⼆版)》和 《[数据结构(C语言版)].严蔚敏_ 吴伟民》等教材型书籍上面还给出了平方取中法、折叠法、随机数法、数学分析法等,这些方法相对更适用于⼀些局限的特定场景,有兴趣可以去看看这些书籍。

三、处理哈希函数

有时候哈希表无论选择什么哈希函数都无法避免冲突 ,那么插入数据时,如何解决冲突呢?
主要有两种方法,线性探测法  和  链地址法

3.1 线性探测法

线性探测是有弊端的 , 如果数据过于密集的话 ,则需要探测多次 , 例如在上面的数组的加个 8 ,那么需要探测多次才能找到存储地址。

那么在创建数组的时候 , 一般会创造  数组元素个数的两倍 的空间个数 , 为的是避免数据过于密集 , 但是依旧会存在一些弊端~

3.2 链地址法

这个也有一点弊端 , 如果所有的数据都冲突在 8 这个位置上 , 怎么办?

---> 把冲突的数据 , 构造成一个红黑树 , 挂在冲突地址上 , 此时查找的时间复杂度会变成logN级别的


http://www.ppmy.cn/server/175097.html

相关文章

前端npm包- CropperJS

文章目录 一、CropperJS**核心特性****官网与文档****安装与使用**1. **通过 npm/yarn/pnpm 安装**2. **HTML 结构**3. **引入 CSS 和 JS**4. **初始化裁剪器** **相关插件/替代方案****适用场景****注意事项** 总结 一、CropperJS cropperjs 是一个轻量级、功能强大的 图片裁…

ArcGIS Pro 车牌分区数据处理与地图制作全攻略

在大数据时代,地理信息系统(GIS)技术在各个领域都有着广泛的应用,而 ArcGIS Pro 作为一款功能强大的 GIS 软件,为数据处理和地图制作提供了丰富的工具和便捷的操作流程。 车牌数据作为一种重要的地理空间数据&#xf…

【Linux docker】关于docker启动出错的解决方法。

无论遇到什么docker启动不了的问题 就是 查看docker状态sytemctl status docker查看docker日志sudo journalctl -u docker.service查看docker三个配置文件(可能是配置的时候格式错误):/etc/docker/daemon.json(如果存在&#xf…

python编写的一个打砖块小游戏

游戏介绍 打砖块是一款经典的街机游戏,玩家控制底部的挡板,使球反弹以击碎上方的砖块。当球击中砖块时,砖块消失,球反弹;若球碰到挡板,则改变方向继续运动;若球掉出屏幕底部,玩家失…

XGPT x DeepSeek:微步AI安全助手满血升级

AI安全助手XGPT全新升级了! 微步在线宣布已完成与DeepSeek的深度接入,正式上线XGPT DeepSeek版,实现AI安全工具在威胁研判、攻击分析、漏洞解读、代码审计等多个场景下模型性能和准确度的全面提升。这也标志着微步在坚持“TIAI”驱动智慧安全…

AI智能分析网关V4将HTTP消息推送至安防监控视频汇聚EasyCVR平台的操作步骤

TSINGSEE青犀视频智能分析网关V4内置了近40种AI算法模型,支持对接入的视频图像进行人、车、物、行为等实时检测分析,上报识别结果,并能进行语音告警播放。硬件管理平台支持RTSP、GB28181协议、以及厂家私有协议接入,可兼容市面上常…

批量清空 Excel 文档主题、标记、作者、保存时间、总编辑时间元数据

在 Excel 文档中,通常会包含一些元数据,这些元数据中有文档的标题、版本号、作者编辑时间等等各种各样的信息,这些信息在某些情况下是非常隐私,也是非常重要的。因此当我们需要将文档发送给第三方的时候,我们通常需要对…

模拟类似 DeepSeek 的对话

以下是一个完整的 JavaScript 数据流式获取实现方案&#xff0c;模拟类似 DeepSeek 的对话式逐段返回效果。包含前端实现、后端模拟和详细注释&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><titl…