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

7.5.1散列表的基本概念

知识总览:

散列表、散列函数:

散列表是一种新的数据结构,每一个散列表都会配套一个散列函数,即设计散列表时就要设计散列函数。散列函数的作用是可以根据数据元素的关键字(关键字就是指这个数据元素代表的值)去计算出这个数据元素在散列表中的存储地址,即根据数据元素映射在散列表的存储地址

如下例子:散列表长度为13,给出散列函数H(key)=key%13,即数据元素在散列表存储位置的计算方式是数据元素对13取余,一组数据元素19,14,23插入散列表,19在散列表存储位置=H(19)=19%13=6,即19存储在散列表位置为6的位置,14在散列表存储位置=H(14)=14%13=1,14存储在散列表1的位置,H(23)=23%13=10,即23存储在散列表10的位置

理想情况,散列表查找数据元素的时间复杂度O(1)。因为可根据散列函数马上定位到数据元素在散列表中的位置,再确定位置上是不是目标关键字,如果是就是查找成功,如果不是查找失败

冲突、同义词:

冲突:在散列表插入数据元素时,根据散列函数计算出的应存在散列表的地址上已经有了其他元素,这种情况就叫冲突或碰撞。冲突发生的越少,散列表的性能就越高

同义词:不同的关键字经过散列函数映射到同一个存储地址,那么这些关键字就是同义词。不同的关键字可能换个散列函数,就没有冲突的情况或不属于同义词了。

如何减少冲突:

构造更合适的散列函数,尽量让不同的数据元素通过散列函数落在散列表不同的位置上,但是再怎么构造合适的散列函数,可能还是会发生冲突,即冲突不可避免

 

冲突不可避免,如何处理冲突:

使用拉链法和开放定址法

拉链法:由冲突造成的同义词,会用拉链把所有的同义词连起来

开放定址法:由冲突造成的同义词,会给后插入的元素再找一个空闲的位置来存储,但是根据什么规则来找空闲的位置。。。。。。

知识回顾:

又水一篇。。。。。。。。

http://www.lqws.cn/news/475003.html

相关文章:

  • 测试工程师实战:用 LangChain+deepseek构建多轮对话测试辅助聊天机器人
  • 深入解析Flink Local模式启动流程源码:揭开作业初始化的神秘面纱
  • vue3 el-table 行颜色根据 字段改变
  • 企业级安全实践:SSL 加密与权限管理(二)
  • python 常见数学公式函数使用详解
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(三十六) -> 配置构建(三)
  • swift-17-字面量协议、模式匹配、条件编译
  • Java 21 的虚拟线程与桥接模式:构建高性能并发系统
  • Kafka Streams入门与实战:从概念解析到程序开发
  • 架构总结记录
  • VSCode性能调优:从卡顿到丝滑的终极方案
  • C++法则11:没有“顶层 const 引用“
  • 16_设备树中的remote-endpoint演示基于视频字符设备Linux内核模块
  • 深度实战|星环OS三大创新场景解密:如何用确定性技术重构智能汽车安全与体验?
  • Unity高性能无GC图表
  • RSA加密原理及推导
  • 跨个体预训练与轻量化Transformer在手势识别中的应用:Bioformer
  • 深入解析ID3算法:信息熵驱动的决策树构建基石
  • 为车辆提供路径规划解决方案:技术演进、挑战与未来蓝图
  • 微处理器原理与应用篇---CISCRISC指令集架构
  • 2025最新Python 100个常用函数在线体验项目
  • 索引——高效查询的关键
  • python中学物理实验模拟:凸透镜成像和凹透镜成像
  • Python 的内置函数 hash
  • `shallowReactive` 与 `shallowRef`:浅层响应式 API
  • 从零开发ComfyUI插件:打造你的AI绘画专属工具
  • CMAKE
  • wordpress外贸独立站常用留言表单插件 contact form 7
  • Python新春烟花
  • NuttX Socket 源码学习