数据结构与算法03-散列表(哈希表)

介绍

散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在存储器存储位置的数据结构。也就是说,它通过计算出一个键值的函数,将所需查询的数据映射到表中一个位置来让人访问,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。

大多数编程语言都自带散列表这种能够快速读取的数据结构。但在不同的语言中,它有不同
的名字,除了散列表,还有散列、映射、散列映射、字典、关联数组。

  • 原理
    一个通俗的例子是,为了查找电话簿中某人的号码,可以创建一个按照人名首字母顺序排列的表(即建立人名X到首字母首字母F(X)的一个函数关系),在首字母为W的表中查找“王”姓的电话号码,显然比直接查找就要快得多。这里使用人名作为关键字,“取首字母”是这个例子中散列函数的函数法则F(),存放首字母的表对应散列表。关键字和函数法则理论上可以任意确定.

从散列表里读取数据只需要 O(1),因为其过程所花的时间是恒定的。它总是先计算出键的散列值,然后根据散列值跳到对应的格子去。

hash冲突情况✍

当不同的key计算出相同的散列值,往已被占用的格子里放东西,会造成冲突。

一种经典的做法就是分离链接。当冲突发生时,我们不是将值放到格子里,而是放到该格子所关联的数组里。
在这里插入图片描述
散列表的格子含有数组,因为要在这些数组上做线性查找,所以步数会多于 1。如果数据
都刚好存在同一个格子里,那么查找就相当于在数组上进行。因此散列表的最坏情况就是 O(N).

存储和效率平衡

一个好的散列函数,应当能将数据分散到所有可用的格子里去。
使用散列表时所需要权衡的:既要避免冲突,又要节约空间

使用场景

适用于检查数据的存在性

  • 用散列表来收集票数
var votes = {};
function addVote(candidate) {
  if (votes[candidate]) {
    votes[candidate]++;
  } else {
    votes[candidate] = 1;
  }
}

function countVotes() {
  return votes;
}

在这里插入图片描述

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

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

相关文章

项目质量管理

目录 1.概述 2.三个关键过程 2.1.规划质量管理(Plan Quality Management) 2.2.管理质量(Manage Quality) 2.3.控制质量(Control Quality) 3.应用场景 3.1.十个应用场景 3.2.产品设计与开发 4.小结…

【自动驾驶技术】自动驾驶汽车AI芯片汇总——地平线篇

0. 前言 按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解及成果,但是内容可能存在不准确的地方。如果发现文中错误,希望批评指正,共同进步。 本篇文章是这个系列的第二篇&#x…

微信小程序毕业设计-书橱系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

[C][栈帧]详细讲解

目录 1.栈帧1.进程地址空间2.栈帧说明 2.认识相关寄存器3.认识相关汇编命令4.过程理解5.栈帧总结6.补充 1.栈帧 1.进程地址空间 .进程地址空间 2.栈帧说明 调用函数,形成栈帧函数返回,释放栈帧局部变量是存放在栈区上的栈区内存的使用习惯是&#xff…

数据结构之实现“通讯录”

大家先赞后看,养成好习惯 你们的点赞和关注还有收藏就是我的动力!!! 目录 前言 一、通讯录文件的创建和联系人结构体定义 1.1 文件创建 1.2 联系人结构体定义 二、通讯录的功能实现 2.1通讯录初始化 2.2通讯录销毁 2.3添…

使用手机小程序给证件照换底色

临时遇到一个需求,需要给证件照换底色。原始图像如下 最终需要换成红底的。 本次使用一款小程序"泰世茂证件照",打开该小程序,如下图所示 单击开始制作,然后选择二寸红底,如下图所示 然后单击相…

【AIGC时代】探索AIGC的无限可能:释放你的创意,定制你的视觉世界

前言 在数字时代的浪潮中,我们的视觉体验正在经历前所未有的变革。随着科技的飞速发展,我们不再满足于传统的图片制作方式,而是渴望拥有更具创意、更富个性的视觉呈现。在这样的背景下,AIGC(人工智能生成内容&#xf…

IF:83.5!一作兼通讯,​Nature系列综述:可以吃的机器人!

在当今科技与生物工程快速融合的时代,传统领域之间的界限正在逐渐模糊,创造了许多前所未有的创新机会。机器人设计与食品加工这两个看似无关的研究领域,正在通过材料特性、制造工艺和功能的交叉融合,展现出巨大的潜力。 可食用机器…

Flutter 验证码输入框

前言: 验证码输入框很常见:处理不好 bug也会比较多 想实现方法很多,这里列举一种完美方式,完美兼容 软键盘粘贴方式 效果如下: 之前使用 uniapp 的方式实现过一次 两种方式(原理相同)&#xff1…

【TB作品】MSP430F5529,单片机,电子秒表,秒表

硬件 MSP430F5529开发板7针0.96寸OLED /* OLED引脚分配 绿色板子DO(SCLK)------P4.3D1(DATA)------P4.0RES-----------P3.7DC------------P8.2CS------------P8.1 */ 程序功能 该程序是一个用C语言编写的,用于msp430f5529微控制器上的简单电子秒表应用。它使用…

多源 BFS 详解

目录 一、多源与单源的区别 二、例题练习 2.1 例题1:01 矩阵 2.2 例题2:飞地的数量 2.3 例题3:地图中的最高点 2.4 例题4:地图分析 一、多源与单源的区别 单源最短路问题如何解决已经在上篇博客给出BFS 解决最短路问题&am…

Qt | Qt 资源简介(rcc、qmake)

1、资源系统是一种独立于平台的机制,用于在应用程序的可执行文件中存储二进制文件(前面所讨论的数据都存储在外部设备中)。若应用程序始终需要一组特定的文件(比如图标),则非常有用。 2、资源系统基于 qmake,rcc(Qt 的资源编译器,用于把资源转换为 C++代码)和 QFile …

Java扩展机制:SPI与Spring.factories详解

一、SPI SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。 整体机制图如下: Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。 系统设计的各个抽象,往往有很多不…

【车载开发系列】汽车开发常用工具说明

【车载开发系列】汽车开发常用工具说明 【车载开发系列】汽车开发常用工具说明 【车载开发系列】汽车开发常用工具说明一. CANbedded二. Davinci Configurator Pro三. Davinci Developer-AUTOSAR软件组件设计工具四. MICROSAR五. MICROSAR OS六. CANdelaStudio七. Volcano VSB八…

css动态导航栏鼠标悬停特效

charset "utf-8"; /*科e互联特效基本框架CSS*/ body, ul, dl, dd, dt, ol, li, p, h1, h2, h3, h4, h5, h6, textarea, form, select, fieldset, table, td, div, input {margin:0;padding:0;-webkit-text-size-adjust: none} h1, h2, h3, h4, h5, h6{font-size:12px…

Nodejs-- 网络编程

网络编程 构建tcp服务 TCP tcp全名为传输控制协议。再osi模型中属于传输层协议。 tcp是面向连接的协议,在传输之前需要形成三次握手形成会话 只有会话形成了,服务端和客户端才能想发送数据,在创建会话的过程中,服务端和客户…

【计算机毕业设计】353微信小程序零食批发交易管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

如何进行时间管理

1.一项调查显示,每个人在睡觉上花费的平均时间大约为25年,这无疑是非常重要的。但排名第二的项目却让人大跌眼镜——看电视是8.3年。接下来分别是工作7.5年、吃饭6年、等待和家务各5年、身体护理4.1年、做白日梦4年,等等。 远远落后的是读书时…

ChatTTS+Python编程搞定语音报时小程序

文字转语音神器Python编程搞定语音报时小程序 今天一个好哥们发了一个文字转语音的AI神器的短视频。这个神器的网站是[ChatTTS - Text-to-Speech for Conversational Scenarios][https://chattts.com/],如下图所示: 这个开源项目可以从github.com上下载…

[数据集][目标检测]轮胎检测数据集VOC+YOLO格式439张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):439 标注数量(xml文件个数):439 标注数量(txt文件个数):439 标注类别…