当前位置: 首页 > ops >正文

散列表(哈希表)

1 散列表的引入


如果我们叭者几个学生按照顺序存储存入到下面这个数组的话,那么每一次的查找方法只有顺序查找或者折半查找,最低的时间复杂度也就只可以下降到(logn),但是时间复杂度还是可以下降,下降到O(1)

我们只要把对应的学号当成对应的数组小标,然后按照学号放入到数组下标就可以找到对应的学生,这样时间复杂度为O(1)

这个表就是散列表,也叫哈希表

2 散列表的散列函数

散列函数分为两种函数
1 直接定制法
f( x ) = kx + b f( x ) = a这种
 


这种方法一般是用到关键字一般都是基本连续的情况,否则会浪费大量的空间

2 除留余数法


我们可以运用除留余数法来进行映射到对应的位置,但是这方法很容易发生冲突,也就是哈希冲突,当我们P可以设置成小于等于表长的最大质数

装填因子就是表中的元素 / 表长 = 装填因子,装填因子越大的话,冲突可能性会更大
装填因子越笑,肯可能越小,但是空间浪费就比较高,所以我们可以指定这个装填因子的大小来设计我们的表

3 应对哈希冲突的方法

当我们进行删除操作的时候,要标记为删除的标记,初始化的标记与删除的标记不一样,删除的标记是你下一次填入值还可填入,查找的时候不会断层

1 线性探测法
 


我们根据我们设计的求余,对应到对应的表格位置,然后把数字放入进去,然后当下一次数字放的时候冲突了,就往后面进行走,走到没有放置的位置,如果从7开始走到11都没有位置就走到0开始放入,找一个空闲的位置

ASL的计算
 


ASL成功 = (1 + 7 + 1 + 2 + 1 + 2 + 1 + 4 + 4)/ 9 = 23 / 9

ASL失败 = (3 + 2 + 1 + 1 + 3 + 2 + 1 + 8 + 7 + 6 + 5) / 11 = 39 / 11

注意为什么要除以11,这里的11是表示的为哈希表所映射的范围
但是这种方法容易发生聚集的现象,就是把很多的数字放到一起

2 平方探测法

就是没放一个数字,如果放生冲突就按照上面给我们数字的顺序给key加值,这样就可以放到各个不同的位置

3 拉链法


就是在对应的位置构建一个链表,这样就可以避免很多的冲突,这里是可以删除对应的元素的

http://www.xdnf.cn/news/10553.html

相关文章:

  • 函数调用的机器级实现(二):栈帧的访问与切换机制
  • 【笔记】为 Python 项目安装图像处理与科学计算依赖(MINGW64 环境)
  • 用wireshark抓包分析学习USB协议
  • 浅写弱口令与命令爆破
  • Cursor 编辑器介绍:专为程序员打造的 AI 编程 IDE
  • Python项目结构
  • 录屏不再难,从功能到体验深度测评
  • MPTCP 聚合吞吐
  • LRU和LFU缓存策略
  • ESP32系列AT固件快速开发——Wi-Fi MQTT
  • 【笔记】Windows系统部署suna基于 MSYS2的Poetry 虚拟环境backedn后端包编译失败处理
  • 汽车安全体系:FuSa、SOTIF、Cybersecurity 从理论到实战
  • 绿盟 IPS 设备分析操作手册
  • Nuxt3部署
  • TS 星际通信指南:从 TCP 到 UDP 的宇宙漫游
  • (Python)列表的操作(增删改查、排序)
  • 2025年ESWA SCI1区TOP,改进成吉思汗鲨鱼算法MGKSO+肝癌疾病预测,深度解析+性能实测
  • 网络攻防技术四:网络侦察技术
  • 重温经典算法——快速排序
  • 探秘集成学习:从基础概念到实战应用
  • 微软PowerBI考试 PL-300学习指南
  • DeepSeek 赋能车路协同:智能交通的破局与重构
  • 模块二:C++核心能力进阶(5篇) 篇一:《STL源码剖析:vector扩容策略与迭代器失效》
  • 核心机制:滑动窗口
  • 相机--相机标定
  • 芝麻酱工作创新点分享1——SpringBoot下使用mongo+Redis做向量搜索
  • PyTorch——卷积操作(2)
  • [网页五子棋][匹配对战]落子实现思路、发送落子请求、处理落子响应
  • Python 在金融中的应用- Part 1
  • JSP、HTML和Tomcat