数据结构基础详解:哈希表【理论计算篇】开放地址法_线性探测法_拉链法详解

news2024/9/21 16:11:20

文章目录

  • 哈希表(散列表)
  • 1. 哈希表(散列表)的基本概念
  • 2. 常见的散列函数
    • 2.1 除留余数法
    • 2.2 直接定址法
    • 2.3 数字分析法
    • 2.4 平方取中法
  • 3. 处理冲突的方法
    • 3.1 拉链法
    • 3.2 开放定址法
      • 3.2.1开放地址法的定义
      • 3.2.2 开放地址法的三种方法
    • 3.3 再散列法(再哈希法)
  • 4. 重难点题型总结
    • 4.1 拉链法求平均成功查找长度与查找失败长度
    • 4.2 开发地址法之线性探测法求平均成功查找长度与查找失败长度

哈希表(散列表)

1. 哈希表(散列表)的基本概念

散列表,又称哈希表。是一种数据结构,特点是:数据元素的关键字与其存储地址直接相关。

解释说明
已知关键字,能计算出来它的存储地址

若不同的关键字通过散列函数映射到同一个值,则称他们为“同义词”。
通过散列函数确定的位置已经存放了其他元素,则称这种情况为“冲突”

给出一个具体实例:
注意在本题中,采用处理冲突的方法是拉链法,即两个关键字,映射到相同的地址,就让他们之间顺序的指向
在这里插入图片描述
1️⃣查找27的过程:
27%13=1 顺序查找地址1,查到第三个成功查到了27。

2️⃣查找21的过程:
21%13=8,为空。
查找长度为0

查找长度-- 在查找运算中,需要对比关键字的次数称为查找长度

3️⃣ ASL成功
(1*6+2*4+3*1+4*1)/12=1.75

平均成功查找长度=查找成功各情况比较的总次数/查找成功的情况总数
最理想的情况
在这里插入图片描述

4️⃣ 平均失败查找长度
(0+4+0+2+0+0+2+1+0+0+2+1+0)/13=0.92

平均失败查找长度:从头带尾都查找失败的总次数/散列表长度 其实就是:表中记录数/散列表长度
平均失败查找长度又叫装填因子a
,,,,,,,,,,,,
引出下文:
不难发现,哈希表最重要的两部分是
如何让关键值分布的均匀------散列函数解决
如果冲突了怎么处理 ----------处理冲突的方法

2. 常见的散列函数

2.1 除留余数法

H(key)=key%p
散列表表长为m,取一个不大于m但最接近或等于m单的质数p,这个p作为散列表新的表长

为什么取最大质数?
让不同关键字的冲突尽可能少。所以即使散列表本身是15,为了减少冲突,还是得取13

2.2 直接定址法

直接定址法
H(key)=key或H(key)=a*key+b

适合分布基本连续的情况,如存储同一个班级的学生信息,班内学生学号为(1120112176~1120112205),设计哈希函数为H(key)=key-1120112176
若分布不连续,空位就会比较多,会造成存储空间的浪费。

2.3 数字分析法

选取数码分布较为均匀的若干位作为散列地址

数码在各位上出现的频率不一定相同,可能在某些位上分布的均匀,某些位不均匀

2.4 平方取中法

取关键字的平方值的中间几位作为散列地址
具体取多少位要视实际情况而定。这种方法得到的散列地址与关键的每位都有关系
在这里插入图片描述

总结:散列查找是典型的用空间换时间的算法,只要散列函数设计的合理,则散列表越长,冲突的概率越低。

3. 处理冲突的方法

3.1 拉链法

前面提到的拉链法就是处理冲突的一种方法

3.2 开放定址法

  • 线性探测法
  • 平方探测法
  • 伪随机序列法

3.2.1开放地址法的定义

开放地址法的核心就是说把其他地址开放,发生冲突时,可以把关键字放入其他的地址
数学公式
Hi=(H(key)+di)%m,其中m是表长!!!
di是增量序列,根据di的不同,可以分为三种方法。

  • ⭐️线性探测法
  • 平方探测法
  • 伪随机序列法
    注意

H(key)是哈希函数,哈希函数的计算是哈希函数,开放地址的计算是另一个东西,切不可混淆。尤其是哈希函数➗的是我们人为设置的,而开放地址法➗的是表长。

使用开放地址法计算ASL的时候,要注意空位置的判断也要算作一次比较,和上面的拉链法不同,可以理解为拉链法比较的是空指针,开放地址法是空的元素,所以算作一次

采用开放定址法时,删除结点不能简单地将被删结点的空间置为空,要做一个删除标记,进行逻辑删除(只能逻辑删除),如果不这么做,后面再查找时,可能会出现中间出现截断就不查找了,直接算查找失败了.

3.2.2 开放地址法的三种方法

1.线性探测法:
di=0,1,2,3,4…m-1,即发生冲突时,每次往后探测相邻的下一个单元是否为空。

di,意味着发生第0次冲突,di取0,+di就是+0,意味着发生第1次冲突,di取1,+di就是+1

举一个计算ASL成功的例子
在这里插入图片描述

举出一个查找失败的例子:
在这里插入图片描述

2.平方探测法:
dI=02,12,-12,22,-22,…,k2,-k2
平方探测法:比起线性探测法更不易产生“聚集”(堆积)问题。
注意一点,一个坑:平方探测法散列表长度m必须是一个可以表示4j+3的素数,才能探测到所有位置。

3.伪随机序列法:di=某个伪随机序列,如di=0,5,24,11,…

3.3 再散列法(再哈希法)

准备多个散列函数,一个发生冲突就用下一个。
在这里插入图片描述

4. 重难点题型总结

4.1 拉链法求平均成功查找长度与查找失败长度

ASL成功要横着看,(一次查找到的结点数+2两次的查到的结点数+…nn次查到的结点数)/表中所有的结点数

ASL失败=表中所有的结点数/表长

4.2 开发地址法之线性探测法求平均成功查找长度与查找失败长度

重点讲解:
1.当用哈希函数算完之后,使用线性探测的时候,要注意,分母变成了表长,不是哈希函数中的modx中的x,并且使用结果是上一步中哈希函数的结果,比如算完46%11=2,假设表长为13,线性探测就是(2+1)%13,而不是(46+1)%13,也不是(2+1)%11,这都是值得注意的。
2.在计算平均查找失败长度的过程中,每一次的情况是遇到空的时候就停止。
分母是映射空间,哈希函数是mod7,地址空间就是0-6,7种情况,从为0的情况出发一直加到6的情况
3.查找成功就是比较次数,这里不多说了

例题1:
在这里插入图片描述
例题2:

在这里插入图片描述

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

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

相关文章

NC 矩阵最长递增路径

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 给定一个 n 行…

网络安全学习(一)初识kali

kali是一个操作系统,和我们平时用的windows系统类似,只是kali是一个集合了很多工具的专用操作系统。 其官网是https://www.kali.org 点击download,选择安装到虚拟机 因为要安装在虚拟机上,所以我们先要安装VM。 使用下载好的kali虚拟机文件(下载后大约3.1G,解压后大约G,…

WGCAT工单系统 v1.2.1 支持导出PDF和分享创建工单功能

官网下载:www.wgstart.com WGCAT-v1.2.1 更新说明,2024-09-15发布 1. 新增,工单数据支持导出为PDF文件 2. 新增,可以分享给其他人创建工单,分享创建工单的链接不需要登录,直接可以提交工单数据,…

SVN笔记-SVN安装

SVN笔记-SVN安装 1、在windows下安装 SVN 1、准备svn的安装文件 下载地址:https://sourceforge.net/projects/win32svn/ 2、下载完成后,在相应的盘符中会有一个Setup-Subversion-1.8.17.msi的文件,目前最新的版本是1.8.17, 这里…

集成测试例题

答案:C 知识点:集成测试主要测的是模块间的接口,包括自顶向下-桩模块,自底向上-驱动模块,三明治-上下并行 自底向下,首先从底层模块开始测试,然后向上一级模块测试 比如说有B,C两…

vue中提示Parsing error: No Babel config file detected

这个错误提示是在说:ESLint 尝试解析你的 .ts (TypeScript) 文件时,找不到 Babel 的配置文件。Babel 通常需要一个配置文件来告诉它如何解析现代 JavaScript 或 TypeScript 代码。以下是对错误信息的详细解释: “No Babel config file detect…

基于TRIZ的救援机器人轻量化设计

在救援机器人设计中,轻量化是一个至关重要的目标,它直接关系到机器人的便携性、运输效率以及在复杂环境中的作业能力。TRIZ理论为我们提供了一套系统化的工具和方法,用于解决设计过程中遇到的各种挑战,特别是在实现轻量化目标时&a…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑生产环节内特性的工业负荷调峰优化运行及二次调频能力评估 》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

iOS 巨魔进阶技巧,全面打破限制,Dopamine 越狱保姆级教程

嘿,这是黑猫,假期愉快。iOS 巨魔商店的意义,在于让未越狱的iPhone,可以自由安装第三方APP,同时赋予APP更高的系统权限。这已经足以满足90%的需求,但远远没到极限。 今天我们来聊一个巨魔高阶技巧&#xff…

【数据仓库】数据仓库常见的数据模型——维度模型

文章部分图参考自:多维数据模型各种类型(星型、雪花、星座、交叉连接) - 知乎 (zhihu.com) 文章部分文字canla一篇文章搞懂数据仓库:四种常见数据模型(维度模型、范式模型等)-腾讯云开发者社区-腾讯云 (ten…

IDEA一键部署Docker应用(赶紧过来卷)

部署要求: 你已经了解docker基本常用命名。 会书写Dockerfile文件。centos上已经安装docker 部署环境:本文采用 Idea2024来进行部署,部署到阿里云的centos的docker上 部分功能展示(idea操作docker挺方便的,大家有空…

用于全文RSS服务的Full-Text-RSS

什么是 Full-Text-RSS ? Full-Text-RSS 能轻松从网页或仅摘要的 RSS 提要中提取完整的文章内容。 是 fivefilters 全文 RSS 服务的非官方 Docker 镜像。 从功能上来说,和老苏之前介绍过的 Morss很 类似 文章传送门:用Morss获取全文RSS摘要 安…

利用secureCRT向虚拟机发送文件(secureCRT安装使用教程)

链接: secureCRT 链接:https://pan.baidu.com/s/1CvNYzoBbLVkyYNFq7hrT0g 提取码:5974 链接: secureCRT安装使用教程 链接:https://pan.baidu.com/s/1Bbi7SqyJBere8G53BCYL5A 提取码:xjw1

扫地机类清洁产品之直流无刷电机控制

扫地机类清洁产品之直流无刷电机控制 1.1 前言 扫地机产品有很多的电机控制,滚刷电机1个,边刷电机1-2个,清水泵电机,风机一个,部分中高端产品支持抹布功能,也就是存在抹布盘电机,还有追觅 科沃斯 石头等边刷抬升电机,滚刷抬升电机等的,这些电机有直流有刷电机,直接…

心觉:《潜意识创富实操营》首批蜕变者招募

昨天写了一篇文章,想帮助大家做“潜意识显化” 可能“显化”这个词,太专业了,有些人听不懂 今天我再用大白话讲一下 潜意识显化,本质上就是用科学的方法把潜意识的能量释放出来 帮助我们达成我们想要的目标 潜意识就像人体中…

AI donotpay平台介绍

AI donotpay平台介绍 DoNotPay 是一个基于人工智能的在线法律服务平台,旨在帮助用户解决与大公司和政府机构的各种问题。以下是对 DoNotPay 平台的详细介绍: 1. 平台概述 创始人: DoNotPay 由 Joshua Browder 于 2015 年创立,最初是一个用于…

20240911泰山杯初赛--temp

Wireshark打开temp.pcap流量包,发现有很多ICMP协议包。 一些ICMP数据包较大,且可发现,明显在传输HTTP协议数据内容: 右键,【显示分组字节】,进一步分析这些HTTP数据: GET /test.html HTTP/1.…

安卓玩机工具-----ADB与 FASTBOOT模式 图形化 多功能玩机刷机工具

工具说明 这款工具是英文版。易于使用的工具提供了用于运行 ADB 和 Fastboot 命令的图形用户界面。ADB 功能包括旁加载、安装和卸载应用程序、测试设备以及重新启动到不同的模式。可以使用 fastboot 命令进行设备管理;其中包括检查 Antirollback 和 active slots 等变…

思维商业篇(3)—三大竞争战略

思维商业篇(3)—三大竞争战略 三大竞争战略 都说商场如战场,每个业务赛道都会有竞争者,所以我们到底应该用什么和别人去竞争去PK呢? 三大竞争战略能帮助你识别和构建你的业务在产业当中的竞争优势,从而更好的获得竞争优势。 三…

CSCC2024数据库内核赛道Profile记录

同学参加CSCC2024数据库系统赛道比赛,我和他一起研究了一些优化的case,最后成功拿到全国2/325。在这里记录一下我们讨论优化过的问题(建议把源码下下来边读边搜代码,否则会晕) 行锁占用内存过大 Q:TPCC测…