数据结构-查找-哈希表

给定一组查找关键字(19,14,23,1,65,20,84,27,55,11,10,79) 哈希函数为:H(key)=key % 13, 哈希表长为m=15,设每个记录的查找概率相等。 给定一组查找关键字(19,14,23,1,65,20,84,27,55,11,10,79) 题目要求 哈希函数为:H(key)=key % 13, 哈希表长为m=15,设每个记录的查找概率相等。 请画出按照线性探测再散列处理冲突得到的哈希表(给出求解过程),并计算查找成功和查找失败时的平均查找长度各是多少。 请画出按照链地址法处理冲突得到的哈希表,并计算查找成功和查找失败时的平均查找长度各是多少。 解题思路 2.1 线性探测 哈希表长为m=15; 分别得到的结果进行线性探测散 阅读详情

哈希表

定义

根据设定的哈希函数H(key)H(key)H(key)和处理冲突的方法将一组关键字映射到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“像”作为记录在表中的存储位置,这种表便被称为哈希表。

上述映像过程称为哈希造表或散列,所得存储位置称为哈希地址或散列地址。

构造哈希函数的方法:

(一个“好”的哈希函数可以减少冲突,但是冲突是不可以避免的)

(1)直接定址法:取关键字或关键字的某个线性函数值为哈希地址。

(2)数字分析法:可以取关键字的若干数位组成哈希地址。

(3)平方取中法:取关键字平方后的中间几位为哈希地址。

(4)折叠法:将关键字分割成位数相同的几部分(最后一部分的位数可以不同),然后取这几部分的叠加和(舍去最高位的进位)做为哈希函数。

(5)除留余数法:取关键字被某个不大于哈希表表长m的数p除后所得余数为哈希地址。这是一种简单,也是最常用的构造哈希函数的方法。

(6)随机数法:选择一个随机函数,取关键字的随机函数值为它的哈希地址。

处理冲突的方法:

(1)开放定址法:

Hi=(H(key)+di) MOD m   i=1,2,...,k(k<=m−1)H_i = (H(key) + d_i) \space MOD \space m \space \space\space i=1,2,...,k (k <=m-1)Hi​=(H(key)+di​) MOD m   i=1,2,...,k(k<=m−1)

其中:H(key)H(key)H(key) 为 哈希函数; m 为 哈希表表长;did_idi​为增量序列可以有下列3种取法:

(1)di=1,2,3,...,m−1,称为线性探测再散列(2)di=12,−12,22,−22,...,k2,−k2,(k<=m/2),称为二次探测再散列、(3)di=伪随机数列,称为:伪随机探测再散列。(1) d_i = 1,2,3,...,m-1,称为线性探测再散列 (2) d_i = 1^2,-1^2,2^2,-2^2,...,k^2,-k^2,(k<=m/2),称为二次探测再散列、(3)d_i=伪随机数列,称为:伪随机探测再散列。(1)di​=1,2,3,...,m−1,称为线性探测再散列(2)di​=12,−12,22,−22,...,k2,−k2,(k<=m/2),称为二次探测再散列、(3)di​=伪随机数列,称为:伪随机探测再散列。

从上述线性探测再散列的过程中可以看到一个现象:当表中i,i+1,i+2位置上已填有记录时,下一个哈希地址为i、i+1,i+2和i+3的记录都将填入i+3的位置,这种在处理冲突过程中发生的两个第一个哈希地址不同的记录争夺同一个后继哈希地址的现象称做“二次聚集”,即在处理同义词的冲突过程中又添加了非同义词的冲突,显然,这种现象对查找不利。但另一方面,用线性探测再散列处理冲突可以保证做到:只要哈希表未填满,总能找到一个不发生冲突的地址.

(2)再哈希法:

Hi=RHi(key)   i=1,2,...,kH_i = RH_i(key) \space\space\space i=1,2,...,kHi​=RHi​(key)   i=1,2,...,k

RHiRH_iRHi​均是不同的哈希函数,即在同义词产生地址冲突时计算另一个哈希函数地址,直到冲突不在发生。

这种方法不易产生“聚集“,但是增加了计算的时间。

(3)链地址法:将所有关键字为同义词的记录存储在同一线性链表中。

链地址法的基本思想是,为每个 Hash 值建立一个单链表,当发生冲突时,将记录插入到链表中。

在这里插入图片描述

(4)建立一个公共溢出区:所有关键字和基本表中关键字为同义词的记录,不管它们由哈希函数得到的哈希地址是什么,一旦发生冲突,都填入溢出表。

例题:
在采用链地址法处理冲突所构成的散列表上查找某一关键字,则在查找成功的情况下,所探测的这些位置上的键值_____。
A.一定都是同义词
B.不一定都是同义词
C.都相同
D.一定都不是同义词

答案:A
解析:因为在链地址法中,映射到同一地址的关键字都会链到与此地址相对应的链表上,所以探测
过程一定是在此链表上进行的,从而这些位置上的关键字均为同义词

参考自
  • [数据结构(C语言版)].严蔚敏
[数据结构]查找(四) 1. 顺序表和有序表的查找方法及其平均查找长度的计算方法。 2. 静态查找树的构造方法和查找算法,理解静态查找树和折半查找的关系。 3. 熟练掌握二叉排序树的构造和查找方法。 4. 理解B-树、B+树和建树的特点以及它们的建树和查找的过程。 5. 熟练掌握哈希表的构造方法,深刻理解哈希表与其它结构的表的实质性的差别。 6. 掌握按定义计算各种查找方法在等概率情况下查找成功时的平均查找长度。 阅读详情

相关推荐

大话数据结构-查找-散列表查找(哈希表)

对散列技术进行介绍,同时介绍散列表的构建方法,包括直接定址法、数字分析法、平方取中法、折叠法、除留余数法和随机数法,并介绍了开放定址法、再散列函数法、链地址法、公共溢出区法等冲突解决办法,并对开放定址

村长Korbin 1239

哈希表:给定一组查找关键字(32,15,7,11,4,28,56,61,79),哈希表长为m=12,请按照除留余数法设计一个哈希函数,设每个记录的查找概率相等。

给定一组查找关键字(32,15,7,11,4,28,56,61,79),哈希表长为m=12,请按照除留余数法设计一个哈希函数,设每个记录的查找概率相等。(1)画出按照线性探测再散列处理冲突得到的哈希表(给出求解过程),并计算等概率情况下查找成功和查找失败时的平均查找长度各是多少。(2)画出按照链地址法处理冲突得到的哈希表,并计算等概率情况下查找成功和查找失败时的平均查找长度各是多少。 除留余数法:处理冲突的方法:开放地址法:线性探测法: 平方探测法: 双散列法: 拉链法: ‌...

Ethereal的博客 2121

【数据结构】查找:哈希表(散列表)——计算式查找法

#笔记整理 哈希表——计算式查找法 定义: 哈希法又称散列法、杂凑法或关键字地址计算法等,相应的表称为哈希表或散列表。 方法的基本思想: 在元素的关键字 Key 和元素的存储位置 p 之间建立一个对应关系 H,使得 p = H(Key),H 称为哈希函数(散列函数),是一个压缩映象。 当需要查找关键字为 key 的元素时,利用哈希函数计算出该元素的存储位置 p = H(key),从而达到按关键字...

自律带来自由 1762

给定一组查找关键字(19,14,23,1,65,20,84,27,55,11,10,79) 哈希函数为:H(key)=key % 13, 哈希表长为m=15,设每个记录的查找概率相等。【MOOC】

给定一组查找关键字(19,14,23,1,65,20,84,27,55,11,10,79) 哈希函数为:H(key)=key % 13, 哈希表长为m=15,设每个记录的查找概率相等。 1. 请画出按照线性探测再散列处理冲突得到的哈希表(给出求解过程),并计算查找成功和查找失败时的平均查找长度各是多少。 2. 请画出按照链地址法处理冲突得到的哈希表,并计算查找成功和查找失败时的平均查找长度各是多少。

upward 1万+

【大话数据结构C语言】62 散列表(哈希表)查找

欢迎关注我的公众号是【CodeAllen】,关注回复【1024】获取精品学习资源 程序员技术交流①群:736386324 程序员技术交流②群:371394777 什么是散列表? 在初中的数学课本中学习过函数的相关知识,给定一个 x,通过一个数学公式,只需要将 x 的值带入公式就可以求出一个新的值 y。 哈希表的建立同函数类似,把函数中的 x 用查找记录时使用的关键字来代替,然后将关键字的值带入一个精心设计的公式中,就可以求出一个值,用这个值来表示记录存储的哈希地址。即: 数...

CodeAllen嵌入式 1924

STM32F407 UART4串口DMA收发实战:告别频繁中断,用空闲中断+DMA搞定不定长数据

本文详细介绍了STM32F407 UART4串口结合DMA和空闲中断实现高效不定长数据收发的实战方案。通过DMA硬件级数据搬运和空闲中断智能帧检测,显著降低CPU占用率,提升通信效率,适用于工业传感器数据采集和智能设备通信场景。

weixin_42631411的博客 154

数据结构与算法之查找算法——哈希表(又称散列表)

哈希表也称为散列表,也是用来查找指定元素的一种方法。 散列表是根据关键字直接进行访问的数据结构。散列表通过散列函数将关键字映射到存储地址,建立了关键字和存储地址之间的一种直接映射关系。这里的存储地址可以是数组下标、索引、内存地址等。 利用哈希表查找元素需要解决两个问题:构造哈希表和处理冲突。 在图8-75中,如果要查找48,就可以通过散列函数得到其存储地址,直接找到该关键字。散列表查找的时间复杂度与表中的元素个数无关。理想情况下,散列表查找的时间复杂度为O(1)。 但是,散列函数可能会把两个或两个以上的关

Atticus的博客 1801

【阿里AgentScope框架】多框架组合:AgentScope加LangChain,让你的开发效率直线上升

本文以一个例子来看下AgentScope框架和LangChain如何实现融合使用,真的超级简单,一看就懂。这是一种思路,为多种框架的融合使用提供借鉴。

同学小张的博客 3469

大话数据结构—散列表查找(哈希表)

一、基本概念散列技术:在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。f:散列函数/哈希函数; 采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表。 关键字对应的记录存储位置称为散列地址。散列技术既是一种存储方法,也是一种查找方法。 散列技术适合求解问题是查找与给定值相等的记录。查找速度快。 散列技术不

小地盘的诺克萨斯 2295

【AUTOSAR SystemServices】深入解析StbM模块:功能定义、工作原理与代码实现

STBM模块:AUTOSAR同步时基管理核心解析 STBM(同步时基管理器)是AUTOSAR标准中实现车载系统时间同步的关键模块,主要功能包括: 时间基准管理:支持全局时基、偏移时基和纯本地时基三种类型,通过StbM_SetGlobalTime和StbM_SetOffset实现主从节点同步。 校正机制:采用偏移校正和速率校正算法(PPM级精度)补偿时钟偏差,确保多ECU时间一致性。 事件处理:监控时间跳变和超时事件,通过回调机制通知上层应用。 典型应用:用于CAN/Ethernet总线同步、时间触发调度及诊

1458

Vue3 - [最强] 超详细 Element Plus 组件库主题颜色进行 “统一全局“ 替换,将默认的蓝色主题色更换为其他自定义颜色,覆盖原来的主题色改为自己的颜色(完美解决主题色不生效、没反应)

elementplus修改主题色,vue3+element-plus主题色更换,vue3vite如何修改扩展elementplus主题色样式,全局设置elementplus主题色,有什么办法可以直接全局修改主题色,对elementplus默认蓝色不满意怎么替换更改其他颜色,elementplus覆盖默认主题色,elementplus主题色官方文档,vue3中修改elementplus主题色,elementplus修改主题色不生效怎么办,elementplus如何修改主题颜色,eleme

🏆 前端领域优质创作者 1万+

【数据结构】查找3——散列表(又称哈希表)的查找

【数据结构】查找3——散列表(又称哈希表)的查找

FishC的博客 1930

视觉Transformer实战 | Cross-Attention Multi-Scale Vision Transformer(CrossViT)详解与实现

Vision Transformer (ViT) 在计算机视觉领域取得了巨大成功,但标准 ViT 结构在处理不同尺度的视觉特征时存在局限性。双分支 ViT (Cross-Attention Multi-Scale Vision Transformer, CrossViT) 通过引入双分支结构来解决这一问题,能够同时捕获局部和全局视觉特征。本文将详细介绍 CrossViT 的技术原理,并使用 PyTorch 从零开始实现 CrossViT 模型。

盼小辉丶的博客 721

23.0、C语言数据结构——散列表(哈希表)查找

数字分析法通常适合处理关键字尾数比较大的情况,例如我们现在要存储某家公司员工登记表,如果用手机号作为关键字,那么我们发现抽取后面的四位数字作为散列地址是不错的选择;散列技术是在记录的存储位置和他的关键字之间建立一个确定的对应关系 f ,使得每个关键字 key 对应一个存储位置 f ( key );这里的random是随机函数,当关键字的长度不等时,采用这个方法构造散列函数是比较合适的;当查找记录时,我们通过同样的是散列函数计算出的散列地址,并按次散列地址进行访问;- 计算散列地址所需的时间;

m0_52433668的博客 1607

详细指南:如何在TI C2000基于C28x的微控制器上部署FreeRTOS_C语言实现

FreeRTOS是一个小型、开源、实时的嵌入式操作系统内核。它为多种微控制器和处理器提供了支持,包括ARM、AVR、MSP430和PIC等。小型和轻量级:适合资源受限的嵌入式系统。实时性:可以满足严格的实时要求。多任务支持:支持多任务并发执行。内存管理:提供了多种内存管理策略。模块化设计:用户可以根据需要选择所需的功能模块。TI C2000系列微控制器是专为实时控制应用设计的。高性能C28x核:提供了高速的浮点运算能力。丰富的外设:包括PWM、ADC、DAC、通信接口等。低功耗。

qq_38334677的博客 1606

D457深度相机调试记录(max96712+max9295A)

使用max96712解串器解4路D457相机。采集深度相机Depth和RGB流。

navy2015_163的博客 1263

【数据结构】查找——散列表(哈希表小总结 附例题)

哈希表小总结

qq_43581971的博客 2017

游戏玩家和排行数据抓取:使用 Python 爬虫抓取游戏中的玩家排名、角色数据和战绩

对于游戏开发者、分析师和玩家本身来说,抓取游戏中的玩家排名、角色数据和战绩信息是一项至关重要的任务。Python提供了强大的爬虫库和数据处理工具,可以帮助我们高效地抓取和分析游戏数据,为游戏分析师、开发者以及玩家本身提供有价值的数据支持。通过本篇博客,我们学习了如何使用Python爬虫技术抓取游戏中的玩家排名、角色数据和战绩。本篇博客将详细介绍如何使用Python编写爬虫来抓取游戏中的玩家排名、角色数据和战绩,并结合最新的技术来实现高效的数据抓取与处理。为了方便后续的数据处理,我们将抓取的数据保存到。

2201_76125261的博客 944

散列表(也称为哈希表)是一种数据结构,它使用关键字(通常是字符串)来存储和查找数据项

使用上述的 get 方法可以从散列表中检索某个数据.我们还可以借助 Enumeration 对象 实现遍历散列表,一个散列表可以使用 elements()方法获取一个 Enumeration 对象,后者使用 nextElement()方法遍历散列表.。在散列表中,每个关键字都通过一个特定的函数(也称为哈希函数或散列函数)被转换为一个唯一的整数,这个整数用于在数组中定位数据项。使用 Hashtable()创建一个散列表,存放 Student 对象,每个 Student 对象 用该对象的学号作为关键字.。

[Blog][Domain] programb.blog.youkuaiyun.com 585

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【数据结构】——查找、散列表的相关习题

low指针一开始指向13,high指针一开始指向134,所以mid指向50,第一次比较90>15,所以low+1,high指针不变,此时low指针指向62,high指针指向134,即mid指向90,即第二次比较时找到目标元素,查找成功的比较次数为2。1、已知有序表(13,18,24,35,47,50,62,83,90,115,134),当二分查找值为90的元素时,查找成功的比较次数为()。,查找成功或不成功,关键字的比较次数始终是n+1次,当定位至第i个元素时,关键字的比较次数为n-i+1。

小宇y的博客 4581

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

数据结构之查找(七)——散列表查找(哈希表)

散列技术 散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应 一个存储位置f(key),即存储位置=f(关键字)。我们把这种对应关系f称为散列函数,又称为哈希(Hash)函数。 采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表(Hash table)。关键字对应的记录存储位置我们称为散列地址。

BackkomCoder的博客 1677

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

散列表查找失败平均查找长度_散列表(哈希表)——数据结构

一,散列表的基本概念直接将元素的储存位置和其关键字之间建立某种直接关系,那么在进行查找时,就无需做比较或做很少次的比较,按照这种关系直接由关键字找到相应的记录,这就是散列表查找法的思想。它通过对元素关键字值进行某种运算,直接求出元素的地址,即使用关键字到地址的直接转换方法,而不需要反复比较。因此散列查找法又称为杂凑法或散列法散列表中的术语:散列函数和散列地址:在记录的存储位置p和其关键字key之间...

weixin_39537680的博客 5594

数据结构之散列表查找(哈希表)

这个知识点不难,话不多说,直接上代码. 代码如下: 1 #include "stdafx.h" 2 #include<iostream> 3 #define SUCCESS 1 4 #define UNSUCCESS 0 5 #define HASHSIZE 12 //定义散列表长为数组的长度 6 #define NU...

weixin_30470857的博客 111

数据结构(六)—— 散列查找(1):散列表

1. 散列表1.1 散列表概述1.2 散列表的抽象数据类型定义1.3 散列的基本思想 1. 散列表 1.1 散列表概述   散列表(Hash table),也叫哈希表,是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。   给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,.

大彤小忆的博客 2880

数据结构基础——哈希表(散列表)查找算法(附C语言算法实现)

哈希表又称作散列表,是一种多用于查找的数据结构,其本质上是一种利用空间换时间的做法,其需要事先分配足够大的内存空间,这实际上是非常浪费空间的,理想化的哈希表所有的操作时间复杂度都为 O(1),这表明其效率非常高。 其根据key值来计算出其的存储位置,查找时也是用key来算出其所在位置,要实现一个哈希表,我们要做到以下两点: (1)尽可能理想 (2)尽可能一一对应 尽可能理想:理想化的哈希表是不存在...

weixin_43653187的博客 2540

C语言数据结构与算法---散列表(哈希表)的查找

文章目录一. 散列表的基本概念二. 散列函数的构造方法1. 要求2. 方法三. 散列函数的实现 一. 散列表的基本概念 基本思想:记录的存储位置与关键字之间存在对应关系 优点:查找效率高 缺点:空间效率低 散列方法: 选取某个函数,依该函数按关键字计算元素的存储位置,并按此存放;查找时,由同一个函数对给定 k 计算地址,将 k 地址单元中有关元素关键码进行对比,确定查找是否成功。 散列函数: 散列...

myjess’s blog 3844
上一篇: 图-最短路径-Floyd
下一篇: PC实用小工具推荐
Magicapprentice
博客等级 码龄12年 111粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值