哈希表(Hash Table)介绍

news2024/9/21 0:33:53

哈希表(Hash Table)介绍

哈希表(Hash Table):也叫做散列表。是根据键值(Key Value、关键码值)直接进行访问的数据结构。

哈希表通过“键(key)”和“映射函数(Hash Function)”计算出对应的“值(value)”,把关键值映射到表中一个位置(哈希值)来访问记录,以加快查找的速度。这个映射函数叫做哈希函数(散列函数),存放记录的数组叫做哈希表(散列表)。

哈希表的主要操作包括:

插入(Insert):将键值对插入哈希表中。如果键已经存在,则更新其对应的值。

查询(Search):根据键查找并返回对应的值。

更新(Update):根据键更新对应的值。

删除(Delete):根据键删除对应的键值对。

哈希表在很多编程语言和库中都有实现,例如 JavaScript 中的 Map 和 Set 对象,以及 Python 中的 dict 数据结构。哈希表的应用非常广泛,例如在数据库、缓存、消息队列等领域都有重要的作用。

哈希表特点:

哈希表(Hash Table),是一个数据结构。

哈希表本质上就是一个数组,只不过数组存放的是单一的数据,而哈希表中存放的是键值对(key - value pair)。

key 通过哈希函数(hash function)得到数组的索引,进而存取索引位置的值。

不同的 key 通过哈希函数可能得到相同的索引值,此时,产生了哈希碰撞。

在哈希表中,键的存储位置是通过散列函数映射得到的。不同的关键字可能得到相同的散列地址,这种情况称为冲突(Collision)。

解决哈希冲突的常见方法是使用链地址法(Chaining)也叫开散列、开放地址法(Open addressing)也叫闭散列。

链地址法:将所有关键字为同义字的记录存储在一个单链表中,我们称这种单链表为同义词子表,散列表中存储同义词子表的头指针。如关键字集合为{19,14,23,01,68,20,84,27,55,11,10,79},按哈希函数H(key) = key mod 13;

链地址法解决了冲突,提供了永远都能找到地址的保证。但是,也带来了查找时需要遍历单链表的性能损耗。

开放地址法:一旦发生了冲突就去寻找下一个空的哈希地址,只要哈希表足够大,空的散列地址总能找到,并将记录存入。
   公式:Hi=(H(*key) + Di) mod m (i = 1,2,3,….,k k<=m-1)
   其中:H(key)为哈希函数;m为哈希表表长;Di为增量序列,有以下3中取法:
     ①Di = 1,2,3,…,m-1, 称为线性探测再散列;
     ②Di = 1²,-1²,2²,-2²,。。。,±k²,(k<= m/2)称为二次探测再散列
     ③Di = 伪随机数序列,称为伪随机数探测再散列。
     例如:在长度为12的哈希表中插入关键字为38的记录:

待续

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

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

相关文章

Hive【Hive(六)窗口函数】

窗口函数&#xff08;window functions&#xff09; 概述 定义 窗口函数能够为每行数据划分 一个窗口&#xff0c;然后对窗口范围内的数据进行计算&#xff0c;最后将计算结果返回给该行数据。 语法 窗口函数的语法主要包括 窗口 和 函数 两个部分。其中窗口用于定义计算范围…

A*算法和Dijkstra

A*算法 A*算法 个人理解FGH&#xff0c;F是总距离&#xff0c;G是已经走过的距离&#xff0c;F是暂未走过的距离&#xff0c;通过不断探索领进路径直至所有路径都到达终点&#xff0c;然后反向去确定最短路&#xff01; A*算法是静态路网中寻找最短路的最有效算法&#xff…

网络安全工程师考证指南,不看就亏了!!

目前网络安全行业&#xff0c;国内都有哪些证书可以考&#xff1f; 一、CISP-PTE &#xff08;国家注册渗透测试工程师&#xff09; CISP-PTE即注册信息安全渗透测试工程师&#xff0c;该证书由中国信息安全测评中心颁发&#xff0c;证书是国内唯一认可的渗透测试认证&#x…

GO 中优雅编码和降低圈复杂度

本次主要是聊聊关于使用接口抽象和降低圈复杂度的方式 工作中&#xff0c;难免会遇到老项目老代码&#xff0c;不仅仅需要我们维护&#xff0c;可能还需要我们在原来的垃圾代码上进行新增功能或者是进行优化调整 例如 现有的老代码中关于用户系统这一块就已经经是摇摇欲坠&a…

新版精仿今日头条新闻网站源码/搭建教程+自动采集接口+采集更新文章【新闻站搭建源码】

精仿今日头条新闻网站源码&#xff0c;这个是新闻站搭建源码&#xff0c;含有搭建教程&#xff0c;也可以自动采集接口采集更新文章。源码亲测可用&#xff0c;mysql5.7、PHP7.3支持页面自适应&#xff0c;里面带有详细安装搭建教程。 功能特点&#xff1a; 1、这个网站可以自…

【C++】多线程的学习笔记(2)——白话文版(bushi

目录 前一篇 本章内容提要 使用mutex锁的原因 mutex锁的概念 mutex的使用教程 锁的声明以及命名 mutex的加锁以及解锁 例子 结果 注意 mutex的其他方式的锁介绍 lock_guard 介绍 例子 运行结果 adopt_lock参数 unique_lock 介绍 try_to_lock defer_lock re…

fic2023(完结,AIRDROP放弃)

AIRDROP 1.请分析苹果手机导出日志,airdrop所使用的扫描模式(Scanning mode)为?? 直接搜索可得Scanning mode Contacts Only 2. AirDrop服务计划监听端口号是多少? 8770 3.AirDrop中接收到图片的识别码(identifier)是多少?(标准格式:12345678-1234-5678-1234-5678…

工厂生产线管理所需的系统介绍

工厂生产线管理对于提高生产效率、优化资源利用和确保产品质量至关重要。在现代化工厂中&#xff0c;采用各种系统来支持生产线的管理和运营。本文将全方位介绍工厂生产线管理所需的系统&#xff0c;包括生产计划系统、设备监控系统、质量管理系统和数据分析系统。 一、生产计划…

Adobe_InDesign_2023_18.4.0.056图文安装教程及下载

Adobe InDesign是Adobe公司的一个桌面出版 (DTP)应用程序&#xff0c;简称“Id”,主要用于各种印刷品的排版编辑。InDesign是一款功能强大的出版物创作、排版和打印软件&#xff0c;可以帮助出版物和广告创作者提高效率&#xff0c;节省时间&#xff0c;改善印刷质量。InDesign…

大模型部署手记(6)通义千问+Jetson AGX Orin

1.简介 组织机构&#xff1a;阿里 代码仓&#xff1a;https://github.com/QwenLM/Qwen 模型&#xff1a;Qwen/Qwen-7B-Chat-Int4 下载&#xff1a;http://huggingface.co/Qwen/Qwen-7B-Chat-Int4 modelscope下载&#xff1a;https://modelscope.cn/models/qwen/Qwen-7B-Ch…

设计模式——Decorator(装饰器模式)

Decorator(装饰器模式) 目的&#xff1a; 动态地给一个对象添加一些额外的职责。 适用性&#xff1a; 在不影响其他对象的情况下&#xff0c;以动态、透明的方式给单个对象添加职责。 简单解释 当有一个已经完成的系统&#xff0c;其中类和对象的关系的错综复杂的&#x…

【MySql】Mysql之备份与恢复

目录 一、mysql日志概述 1、日志类型与作用 2、日志配置文件 3、日志配置文件的查询 二、备份的类型❤ 1、物理备份 1.1 冷备份 1.2 热备份 1.3 温备份 2、逻辑备份❤ 2.1 完全备份 2.2 差异备份 2.3 增量备份 2.5 如何选择逻辑备份策略 3、常见的备份方法 3…

大模型部署手记(3)通义千问+Windows GPU

1.简介 组织机构&#xff1a;阿里 代码仓&#xff1a;GitHub - QwenLM/Qwen: The official repo of Qwen (通义千问) chat & pretrained large language model proposed by Alibaba Cloud. 模型&#xff1a;Qwen/Qwen-7B-Chat-Int4 下载&#xff1a;http://huggingface…

Modelsim测试覆盖率操作说明

1、打开Project窗口界面 2、在project界面下&#xff0c;选中所有需要测试覆盖率的.v文件&#xff08;不包括tb文件&#xff09;&#xff0c;鼠标点击右键&#xff0c;在Properties选项中选择Coverage选项&#xff0c;选择需要测试的覆盖率类型 3、重新编译所有的源文件&#x…

【gitlab】从其他仓库创建项目

需求描述 解决方法 以renren-fast脚手架为例 第一步 第二步 第三步 第四步 参考文章

Echarts 教程二

Echarts 教程二 Echarts 常用配置篇柱状图常用配置折线图常用配置散点图常用配置饼图常用配置地图常用配置 Echarts 常用配置篇 柱状图常用配置 配置柱状图的最大最小值 平均值 显示柱状图文字 柱状图宽度 折线图常用配置 配置最大最小值 平均值 标记区域 线的平滑 线的样式 等…

苹果签名有多少种类之TF签名(TestFlight签名)是什么?优势是什么?什么场合需要应用到?

&#xff08;一&#xff09;TestFlight 能够让您&#xff1a;邀请内部和外部的测试人员为应用程序提供反馈。 跟踪应用程序在测试过程中发现的 bug 和用户体验问题。 收集 Crash 报告&#xff0c;了解应用程序在真实设备上的运行状况。 要使用 TestFlight&#xff0c;您可以按照…

用Python操作Word文档,看这一篇就对了!

本文主要讲解Python中操作word的思路。 一、Hello&#xff0c;world&#xff01; 使用win32com需要安装pypiwin32 pip install pypiwin32 推荐使用python的IDLE&#xff0c;交互方便 1、如何新建文档 from win32com.client import Dispatchapp Dispatch(Word.Application…

大模型部署手记(4)MOSS+Jetson AGX Orin

1.简介 组织机构&#xff1a;复旦大学 代码仓&#xff1a;GitHub - OpenLMLab/MOSS: An open-source tool-augmented conversational language model from Fudan University 模型&#xff1a;fnlp/moss-moon-003-sft-int4 下载&#xff1a;https://huggingface.co/fnlp/mos…

【C语言】八大排序算法

文章目录 一、冒泡排序1、定义2、思想及图解3、代码 二、快速排序1、hoare版本2、挖坑法3、前后指针法4、非递归快排5、快速排序优化1&#xff09;三数取中选key值2&#xff09;小区间优化 三、直接插入排序1、定义2、代码 四、希尔排序1、定义2、图解3、代码 五、选择排序1、排…