12.4散列查找定义,散列函数,散列查找(开放定址法,处理冲突),总结

news2024/11/20 10:28:14

 

散列函数定义

 

 

ASL计算 

查找长度——在查找运算中,需要对比关键字的次数称为查找长度(有的教材也会把“空指针”的判定算作一次比较)

14,68,19,20,23,11这6个元素查一次就可以;1,55,84,10需要查两次;27要3次,79要4次

装填因子

表中记录数就是每个格子里放的数

散列函数

输入指定的元素,输出一个该元素对应的哈希值

没有考虑次序问题,即同字符不同排序会对应同一哈希值造成冲突

除留余数法

直接定址法

 数字分析法

 

 

所谓分布均匀就是这位上所有数字都有可能出现,不均匀就是这位上更偏向于出现某一特定的值

平方取中法

折叠法

移位叠加就是每行从模的开始开始;边界叠加就是一条龙连续的下来

随机数法

开放定址法

开放定址就是冲突处理的一种方式

线性探测法

就是令d=1,2,3……,不断往后尝试

但是会造成聚集,即随着存储元素的增多,存储元素会冲突,而且堆积在一起,即这里冲突了,下一个也会冲突,不断冲突,直到出了聚集区域,但挨着聚集区域存储,又相当于增添了聚集区域大小。

  • 线性探测法很容易造成同义词、非同义词的“聚集(堆积)”现象,严重影响查找效率
  • 产生原因——冲突后再探测一定是放在某个连续的位置

 平方探测法

和线性相比,主要就是d的确定不一样。

散列表长度 m 必须是⼀个可以表示成 4j + 3 的素数,才能探测到所有位置

”截断查找路径“

当在哈希表中进行查找时,如果遇到已删除的元素,线性探测法会继续向后探测,寻找下一个非空槽。如果置为空,这就导致了“截断”同义词结点的查找路径的情况。

索引元素
012
123
234
345
456
567
678
789
890
9101

现在需要删除元素56,为了保持哈希表的正确性,采用懒删除的方式。删除后,哈希表的状态如下:

索引元素
012
123
234
345
4已删除
567
678
789
890
9101

就是说,如果查找的元素冲突了,往后接着找。

在删除路径上某一元素后时,如果直接标记为空,就会不再继续往后探测,而是认为后面都是空的,但实际上空的后面是存储着元素的,所以这个”空“就截断了继续向后的查找路径,即后面可能有要操作的元素,但因为这个”空“认为没有,就会导致再在空里插入相同的元素。所以就需要区分”空“与”已删除“

在查找时,遇到”已删除“则继续进行查找,遇到”空“则表明查找失败。

在插入新节点时可以在”已删除“的节点上进行操作

理解

为什么需要哈希函数?不就是为了得到唯一的哈希值,直接编号不就是吗?

哈希值在内存中通常不是连续存储的,而是通过哈希表来进行存储。哈希表是一种基于数组和链表的数据结构,用于实现高效的插入、查找和删除操作。

哈希表由一个数组和一组哈希桶组成。数组的每个元素称为哈希桶,每个哈希桶可以存储一个或多个元素。哈希函数将输入数据映射到哈希桶的索引位置,然后将元素存储在对应的哈希桶中。

当需要存储一个元素时,首先通过哈希函数计算得到该元素的哈希值,然后根据哈希值找到对应的哈希桶。如果哈希桶为空,则将元素直接存储在该桶中;如果哈希桶已经包含了其他元素,通常会使用链表或其他数据结构将新元素链接到已有元素的后面。

当需要查找一个元素时,同样先通过哈希函数计算得到该元素的哈希值,然后根据哈希值找到对应的哈希桶。如果哈希桶为空,则表示没有找到该元素;如果哈希桶不为空,则需要在哈希桶的链表或其他数据结构中顺序查找,直到找到目标元素或到达链表末尾。

通过哈希表的这种方式,可以在平均情况下实现常数时间的插入、查找和删除操作。当然,在极端情况下,哈希冲突可能会导致链表过长,从而影响性能。为了保持哈希表的高效性,通常会对哈希表进行动态扩容,并使用一些解决冲突的方法,如链地址法或开放寻址法。这样可以保证哈希表的负载因子较低,减少冲突的发生。

数组可以认为是一种哈希表,它的哈希值是连续的,哈希桶也是连续的。

散列查找

例子:线性

查找性能:

查找效率取决于散列函数、处理冲突的方法、装填因子α

23mod11=1,68Mode11=2.和每个格子的比较都需要一次查找次数。

查找失败的条件为,对应哈希值的位置为”空“,则表明查找失败。 遇到”已删除“则继续进行查找

如果计算出的哈希值对应的结点直接是空,那么直接失败(如9,10);

如果对应的结点值不是需要的,那么进行冲突处理,如果就是没有,那就继续进行到空结点的位置(这里线性探测,所以就是连续到9的位置,一共11个元素,那么9和10是1次,和自己判断需要一次,然后0~8要不断和自己比较,比较后往后走一步)。

总结图

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

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

相关文章

分享73个节日PPT,总有一款适合您

分享73个节日PPT,总有一款适合您 73个节日PPT下载 链接:https://pan.baidu.com/s/1FG9Y-9yR31Y-fs3zxKI4Pg?pwd6666 提取码:6666 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不…

轨道交通数字孪生可视化平台,助力城市交通运营智慧化

随着经济和科技的快速发展,轨道交通运营管理在日常操作者面临各种挑战。数字孪生技术被认为是未来轨道交通运营管理的重要手段之一。它可以提高轨道交通的运营效率和安全性,助力城市交通运营智慧化。以城市轨道交通运维管理业务需求为导向,从数据感知、融…

备忘录不小心删了怎么办?如何找回我的备忘录?

如果你的记性不太好,或者每天需要记住、完成的事情很多,那么养成随手记事的好习惯是非常有必要的。因为手机是每个成年人都会随身携带的电子设备,所以直接在手机上记录事情比较简单、便捷。而手机备忘录、便签、笔记等工具类软件,…

docker搭建nginx实现负载均衡

docker搭建nginx实现负载均衡 安装nginx 查询安装 [rootlocalhost ~]# docker search nginx [rootlocalhost ~]# docker pull nginx准备 创建一个空的nginx文件夹里面在创建一个nginx.conf文件和conf.d文件夹 运行映射之前创建的文件夹 端口:8075映射80 docker…

java版微信小程序商城免费搭建 java版直播商城平台规划及常见的营销模式有哪些?电商源码/小程序/三级分销

涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis …

c++ atmoic acquire/release

由于多核cpu缓存的存在,以及gcc编译优化,cpu指令层面的优化,导致程序的执行顺序可能跟你写的顺序不完全一致(reorder)。 但是在多线程编程中如何确保各个线程能正确的读取到各个变量呢(而不是cache中老旧的…

springboot集成docker

1、快速构建springboot-demo项目 地址:https://start.spring.io/

二维码智慧门牌管理系统升级解决方案:重新制牌审核快速审批

文章目录 前言一、快速审批与重新安装一、其他系统优势 前言 随着城市化进程的加速,门牌号码的管理变得日益重要。然而,传统的门牌管理方式已经无法满足现代社会的需求。在这样的背景下,二维码智慧门牌管理系统应运而生。但随着系统使用&…

Python---练习:列表赋值---追加append尾部追加元素,追加的是一个元素整体

相关链接: Python--列表及其应用场景---增、删、改、查。-CSDN博客 代码: # 列表赋值 a [1, 2, 3] a.append([3, 4]) # append尾部追加元素,追加的是一个元素整体:[3, 4] print(a)

动手学深度学习笔记

1. 深度学习基础与MLP 1.1 框架: 线性回归; Softmax回归(实际上用于分类问题); 感知机与多层感知机; 模型选择; 权重衰退(weight decay); 丢弃法&…

利用ChatGPT轻松实现科研论文高效写作

2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

等保的未来走向如何?

等级保护有近20年的发展历程,在此期间等级保护制度从无到有,从定级到测评,网络安全工作逐步完善,并在各个行业中得到了切实的实践执行,对我国的网络安全具有重要的指导作用,全面提高了我国网络安全建设和安…

Linux入门攻坚——7、磁盘管理——文件系统挂载管理及RAID、LVM

已经安装文件系统的分区需要经过挂载才能使用。 一切文件系统的使用都是从根开始,根是文件系统的起始点。 计算机启动过程:加电自检——bootloader——kernel——rootfs——/sbin/init kernel第一步要加载根系统。 将额外文件系统与根文件系统某现存的…

陪玩圈子系统:打破单身孤独,展开精彩社交旅程,APP小程序H5,源码交付,支持二开!

近年来,随着社交网络的快速发展,越来越多的人开始寻求各种方式来解决单身孤独的问题。而陪玩圈子系统便应运而生,在为用户提供社交服务的同时也促进了人与人之间的互动和交流。在这个拥有庞大用户数量和各种丰富活动的平台上,你将…

GAN:SNGAN-谱归一化GANs

论文:https://arxiv.org/pdf/1802.05957.pdf 代码:GitHub - pfnet-research/sngan_projection: GANs with spectral normalization and projection discriminator 发表:2018 ICLR 摘要 GANs的主要挑战是:训练的稳定性。本文作…

微信开发者工具请求所有接口都出现502,使用postman测试正常

发现network中接口的remote address有问题 最终发现是小程序开发者工具给我整了代理

Leetcode题库(数据库合集)_ 难度:中等

目录 难度:中等1.股票的资本损益2. 当选者3. 页面推荐4. 2016年的投资5. 买下所有产品的人6. 电影评分6. 确认率7. 按分类统计薪水8. 餐馆营业额的变化增长8. 即时食物配送 ①9. 至少有5名直系下属的经理10. 游戏玩法分析11. 好友申请:谁有最多的好友12.…

【FPGA】Verilog:二进制并行加法器 | 超前进位 | 实现 4 位二进制并行加法器和减法器 | MSI/LSI 运算电路

Ⅰ. 前置知识 0x00 并行加法器和减法器 如果我们要对 4 位加法器和减法器进行关于二进制并行运算功能,可以通过将加法器和减法器以 N 个并行连接的方式,创建一个执行 N 位加法和减法运算的电路。 4 位二进制并行加法器 4 位二进制并行减法器 换…

允许root远程连接数据库

开放root远程连接数据库的权限(Linux系统) 环境:centos7,关闭防火墙(没关要开放数据库的端口) 一、进入数据库,查看权限表信息 MariaDB [(none)]> use mysql Reading table information fo…

前后端参数传递总结

1、 页面参数 js传递参数 渲染表格 页面控制器(前端) 后端控制器 后端服务 实体赋值 2、跟踪情况