哈希表查找成功和不成功的算法

合集下载

数据结构(习题三)

数据结构(习题三)

从上图可以看出,查找失败的最少比较次数为 3,最多比较次数为 4 次,故而选择 B答案。要特别注意,有的书把失败的比较也算作一次 比较,这里我们不算一次比较。
第五部分
查找
考点四 二叉排序树
本考点主要考查:
二叉排序树的概念和构造方法
第五部分
查找
考点四 二叉排序树
1. 若构造一棵具有 n 个结点的二叉排序树,最坏的情况下其深度不超 过 ( B ) A. n/2 B. n C. (n+1)/2 D. n+1 【解析】 最坏的情况下, 二叉排序树为单支树, 比如构造一棵 {1,2,3,4,5,…,n}的二叉树,则得到的二叉排序树如下图所示。
D. ③
【解析】对于 m 阶 B 树,除了根结点至少要有两棵子树之外,其他非 叶子结点至少有⌈m/2⌉棵子树,故而①错误。树中,每个结点至多有 m-1 个关键字,而且所有叶子都在同一层上,故而②③显然正确。但 是,插入一个关键字使得 B 树结点分裂,并不一定会引起树长高一层 ,如第 2 题中插入结点 70, B-树的前后高度都是 2,故而④错误。
第五部分
查找
考点七 哈希表
1. 以下说法错误的是 ( B ) A. 散列法存储的思想是由关键字值决定数据的存储地址 B. 散列表的结点中只包含数据元素自身的信息,不包含指针。 C. 负载因子是散列表的一个重要参数,它反映了散列表的饱满程度。 D. 散列表的查找效率主要取决于散列表构造时选取的散列函数和处理 冲突的方法。
数据结构
习 题 三
第五部分
查找
考点一 查找的基本概念
本部分考查查找的基本概念。
第五部分
查找
考点一 查找的基本概念
1. 要进行线性查找,则线性表 (1) D ;要进行二分查找,则线性表 (2) E ;要进行散列查找,则线性表 (3) C 。某顺序存储的表格,其 中有 90000 个元素,已按关键项的值的上升顺序排列。现假定对各个 元素进行查找的概率是相同的,并且各个元素的关键项的值皆不相同 。当用顺序查找法查找时,平均比较次数约为 (4) C ,最大比较次数 为 (5) D 。

哈希表的定义查找及分析bklt

哈希表的定义查找及分析bklt
常用的构造哈希(散列)函数的方法
一、直接地址法

取关键字或关键字的某个线性函值为哈希地址
即: H(key) = key 或: H(key) = a* key + b
其中,a, b为常数。
二、数字分析法
假设关键字集合中的每个关键字都是由 s 位 数字组成 (u1, u2, …, us),分析关键字集中的全 体, 并从中提取分布均匀的若干位或它们的组 合作为地址。
查找不成功时的ASL
ASLunsucc=( )/11
= /11
10
11
3
8
线性探测再散列的优点:
只要哈希表未满,总能找到一个空地址。
缺点:会产生二次聚集。
01…
70 19 33 18
5678 9
… 12
9
二、 链地址法
在哈希表的每一个单元中存放一个指针,将所 有的同义词连成一个链表。 假设哈希地址在区间[0 .. m-1]上,则哈希表为
一个指针数组。
typedef struct node{ //定义链表中结点 KeyType key; 其它成员 ; struct node *next;
} Node,*Nodeptr; typedef Nodeptr chainhash[m];// 定义指针数组10
例1: 关键字集合 { 19, 01, 23, 14, 55, 68, 11, 82, 36 }
若采用线性探测再散列处理冲突
0 1 2 3 4 5 6 7 8 9 10
55 01 23 14 68 11 82 36 19
11 21 3 62 5 1
若采用二次探测再散列处理冲突
0 1 2 3 4 5 6 7 8 9 10

哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度

哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度

哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度⼀、哈希表1、概念哈希表(Hash Table)也叫散列表,是根据关键码值(Key Value)⽽直接进⾏访问的数据结构。

它通过把关键码值映射到哈希表中的⼀个位置来访问记录,以加快查找的速度。

这个映射函数就做散列函数,存放记录的数组叫做散列表。

2、散列存储的基本思路以数据中每个元素的关键字K为⾃变量,通过散列函数H(k)计算出函数值,以该函数值作为⼀块连续存储空间的的单元地址,将该元素存储到函数值对应的单元中。

3、哈希表查找的时间复杂度哈希表存储的是键值对,其查找的时间复杂度与元素数量多少⽆关,哈希表在查找元素时是通过计算哈希码值来定位元素的位置从⽽直接访问元素的,因此,哈希表查找的时间复杂度为O(1)。

⼆、常⽤的哈希函数1. 直接寻址法取关键字或者关键字的某个线性函数值作为哈希地址,即H(Key)=Key或者H(Key)=a*Key+b(a,b为整数),这种散列函数也叫做⾃⾝函数.如果H(Key)的哈希地址上已经有值了,那么就往下⼀个位置找,知道找到H(Key)的位置没有值了就把元素放进去.2. 数字分析法分析⼀组数据,⽐如⼀组员⼯的出⽣年⽉,这时我们发现出⽣年⽉的前⼏位数字⼀般都相同,因此,出现冲突的概率就会很⼤,但是我们发现年⽉⽇的后⼏位表⽰⽉份和具体⽇期的数字差别很⼤,如果利⽤后⾯的⼏位数字来构造散列地址,则冲突的⼏率则会明显降低.因此数字分析法就是找出数字的规律,尽可能利⽤这些数据来构造冲突⼏率较低的散列地址.3. 平⽅取中法取关键字平⽅后的中间⼏位作为散列地址.⼀个数的平⽅值的中间⼏位和数的每⼀位都有关。

因此,有平⽅取中法得到的哈希地址同关键字的每⼀位都有关,是的哈希地址具有较好的分散性。

该⽅法适⽤于关键字中的每⼀位取值都不够分散或者较分散的位数⼩于哈希地址所需要的位数的情况。

4. 折叠法折叠法即将关键字分割成位数相同的⼏部分,最后⼀部分位数可以不同,然后取这⼏部分的叠加和(注意:叠加和时去除进位)作为散列地址.数位叠加可以有移位叠加和间界叠加两种⽅法.移位叠加是将分割后的每⼀部分的最低位对齐,然后相加;间界叠加是从⼀端向另⼀端沿分割界来回折叠,然后对齐相加.5. 随机数法选择⼀个随机数,去关键字的随机值作为散列地址,通常⽤于关键字长度不同的场合.6. 除留余数法取关键字被某个不⼤于散列表表长m的数p除后所得的余数为散列地址.即H(Key)=Key MOD p,p<=m.不仅可以对关键字直接取模,也可在折叠、平⽅取中等运算之后取模。

搜索引擎中的哈希算法

搜索引擎中的哈希算法

搜索引擎中的哈希算法随着互联网的不断发展,搜索引擎成为了我们日常生活中不可或缺的一部分。

无论是查找资料,还是查询商品,搜索引擎都可以帮助我们快速便捷地定位所需信息。

然而,在搜索引擎背后的技术中,哈希算法是一种非常重要的计算机算法,它能够帮助搜索引擎更加高效地处理数据和提供搜索结果。

什么是哈希算法?哈希算法是一种将任意长度的消息变换成固定长度输出(通常较短)的算法。

哈希算法的输出结果我们称之为哈希值,这个值通常用于数据校验、散列函数和消息认证码等方面。

哈希算法具有以下几个特点:1. 输入数据的长度可以是任意的,但是输出的结果长度是固定的。

这样就能够将不同长度的数据进行“压缩”成一样的长度。

2. 哈希算法是一种单向加密,即不能通过哈希值推算出原始数据内容。

3. 对于输入数据的任意改变,都会导致哈希值的改变。

4. 哈希算法的结果分布均匀,尽可能避免了哈希冲突的发生。

哈希算法在搜索引擎中的应用在搜索引擎中,哈希算法主要用于对文档进行索引和快速查找。

在搜索引擎的建立过程中,需要将网页内容存储到索引库中,并对每个网页的关键信息进行提取和处理,生成索引。

由于搜索引擎需要处理的网页数量非常之大,如果每次查找都要全面地遍历所有的网页,那么搜索效率会非常低下。

因此,在处理搜索请求之前,需要先根据搜索关键词计算出哈希值,然后通过哈希值快速地定位到可能含有搜索结果的大约范围。

具体来说,搜索引擎可以将所有文档的关键信息进行哈希值的计算,然后将哈希值作为索引内部的一个标识符。

当有新的搜索请求进来时,可以直接计算搜索关键词的哈希值,然后在哈希表中查找对应的索引,找到可能含有搜索结果的网页范围。

这样,搜索引擎就能够通过哈希算法处理大量的数据,在保证速度的同时,还能够实现快速高效地搜索。

除了在文档索引中的应用外,哈希算法还可以用于判断两个文件是否相同,数据加密等方面。

在实际应用中,不同的哈希算法都有自己的优缺点,需要根据实际情况来选择。

第八章习题

第八章习题

第八章习题8.1 若对大小均为n的有序的顺序表和无序的顺序表分别进行查找,试在下列三种情况下分别讨论两者在等概率时的平均查找长度是否相同?(1)查找不成功,即表中没有关键字等于给定值K的记录。

(2)查找成功且表中只有一个关键字等于给定值K的记录。

(3)查找成功且表中有若干个关键字等于给定值K的记录,一次查找要求找出所有记录。

8.2画出对长度为10的有序表进行折半查找的判定树,并求其等概率时查找成功的平均查找长度。

8.3试推导含12个结点的平衡二叉树的最大深度并画出一棵这样的树。

8.4试从空树开始,画出按以下次序向2-3树(即3阶B-树)中插入关键码的建树过程:20,30,50,52,60,68,70。

如果此后删除50和68,画出每一步执行后2-3树的状态。

8.5选取哈希函数H(k)=(3k)%11,用线性探测再散列法处理冲突。

试在0~10的散列地址空间中,对关键字序列(22,41,53,46,30,13,01,67)构造哈希表,并求等概率情况下查找成功与不成功时的平均查找长度。

8.6试为下列关键字建立一个装载因子不小于0.75的哈希表,并计算你所构造的哈希表的平均查找长度。

(ZHAO,QIAN,SUN,LI,ZHOU,WU,ZHENG,WANG,CHANG,CHAO,YANG,JIN)8.7试编写利用折半查找确定记录所在块的分块查找算法。

8.8试写一个判别给定二叉树是否为二叉排序树的算法。

设此二叉树以二叉链表作存储结构,且树中结点的关键字均不同。

8.9编写算法,求出指定结点在给定的二叉排序树中所在的层数。

8.10 编写算法,在给定的二叉排序树上找出任意两个不同结点的最近公共祖先(若在两结点A、B中,A是B的祖先,则认为A是A、B的最近公共祖先)。

8.11 编写一个函数,利用二分查找算法在一个有序表中插入一个元素x,并保持表的有序性。

8.12 已知长度为12的表:(Jan,Feb,Mar,Apr,May,June,July,Aug,Sep,Oct,Nov,Dec)。

哈希表与一般查找方法的比较及冲突的解决

哈希表与一般查找方法的比较及冲突的解决

录 。 这 个理 想的 情 况 可 以 通过 哈 希 表 来 实现 。 [ 键 词 ] 哈 希 表 ; 希 函数 ; 突 ; 找 ; 关 哈 冲 查 关键 字 [ 中图 分 类 号 ] T 3 1 6 [ 献 标识 码 ] A [ P 0. 文 文章 编 号 ]
1 一般查 找方法 的介绍
找成 功 。反 之 , 直 至 最 后 一 个 记 录 , 关 键 字 和 给定 值 的 应 。因 而 在查 找 时 , 若 其 只要 根 据这 个 对 应 关 系 F就 能 找 到 给定 比较都 不 相 等 , 则表 明 表 中没 有 给 定 值 , 种 方 法 可 用 在 学 值 K 的 像 F K 。若 表 中存 在 关 键 字 和 K 相 等 的 记 录 , 必 这 () 则 生 成 绩 表 中查 找 某 一 学 生 的 成绩 。 定 在 F K) 存 储 位 置 上 。其 实 换 个 说 法 , 是 通 过 函数 F ( 的 就 从 上 面 的例 子 可 知 顺序 查 找 方 法 效 率 不 高 , 但是 我 们 还 ( , 出要 查 找 关键 字 K 的 存 储 位 置 F K) 这 样 就 实 现 了 )算 ( , 有其他查找方法 , : 如 折半 查 找 , 是 建 立 在 数 据 存 放 有 序 的 不 需 要进 行 比较 便 可 直 接 取 得 查 找 记 录 。在 此 , 们 称 这 个 它 我
第2 O卷第 5 期
哈希 表 与 一 般 查 找 方 法 的 比较 及 冲 突 的解 决
骆剑 锋
( 东 技 术 师 范学 院 天 河 学 院 计 算 机 系 , 东 广 州 ,1 50 广 广 504)
[ 摘
要 ] 众 所 周 知 , 表 中查找 记 录 时 需进 行 查找 值 和 关键 字的 比较 。这 一 类 查 找 方 法 建 立 在 “ 较 ” 在 比 的基 础

哈 希 常 见 算 法 及 原 理

哈 希 常 见 算 法 及 原 理

Python算法系列-哈希算法哈希算法一、常见数据查找算法简介二、什么是哈希三、实例:两个数字的和1.问题描述2.双指针办法解决3.哈希算法求解四、总结哈希算法又称散列函数算法,是一种查找算法。

就是把一些复杂的数据通过某种映射关系。

映射成更容易查找的方式,但这种映射关系可能会发生多个关键字映射到同一地址的现象,我们称之为冲突。

在这种情况下,我们需要对关键字进行二次或更多次处理。

出这种情况外,哈希算法可以实现在常数时间内存储和查找这些关键字。

一、常见数据查找算法简介常见的数据查找算法:顺序查找:是最简单的查找方法。

需要对数据集中的逐个匹配。

所以效率相对较低,不太适合大量数据的查找问题。

二分法查找:效率很高,但是要求数据必须有序。

面对数据排序通常需要更多的时间。

深度优先和广度优先算法:对于大量的数据查找问题,效率并不高。

这个我们后面专门讲解。

阿希查找算法:查找速度快,查询插入,删除操作简单等原因获得广泛的应用。

二、什么是哈希哈希查找的原理:根据数量预先设一个长度为M的数组。

使用一个哈希函数F并以数据的关键字作为自变量得到唯一的返回值,返回值的范围是0~M-1。

这样就可以利用哈希函数F将数据元素映射到一个数组的某一位下标,并把数据存放在对应位置,查找时利用哈希函数F计算,该数据应存放在哪里,在相应的存储位置取出查找的数据。

这里就有一个问题:关键字的取值在一个很大的范围,数据在通过哈希函数进行映射时。

很难找到一个哈希函数,使得这些关键字都能映射到唯一的值。

就会出现多个关键字映射到同一个值的现象,这种现象我们称之为冲突。

哈西算法冲突的解决方案有很多:链地址法,二次再散列法。

线性探测再散列建立一个公共溢出区注意:链地址法本质是数组+链表的数据结构链地址法存储数据过程:首先建立一个数组哈希存储所有链表的头指针。

由数组的关键字key 通过对应的哈希函数计算出哈希地址。

找到相应的桶号之后,建立新的节点存储该数据。

哈 希 查 找

哈 希 查 找
数据结构
哈希查找
一、哈希表的基本概念 二、构造哈希函数的方法 三、处理冲突的方法 四、哈希表的查找及分析
一、哈希表的基本概念
哈希(Hash)函数:如果在关键字与数据元素的存储位置之间建立某种 对应关系H,根据这种对应关系就能很快地计算出与该关键字key对应的 存储位置的值H(key),我们将关键字与存储位置之间的这种对应关系称 为哈希(Hash)函数。 把关键字为key的元素直接存入地址为H(key)的存储单元,当查找关键 字为key的元素时,利用哈希函数计算出该元素的存储位置H(key),从 而达到按关键字直接存取元素的目的。按照这个思想建立的查找表叫 做哈希表,所得到的存储位置称为哈希地址,利用哈希表进行查找的 方法称为哈希查找。
根据增量序列的取值方式的不同,开放定址法又分为以下三种: ① 线性探测再散列:di为1,2,3,…,h-1,即冲突发生时,顺序查 看哈希表中的下一个位置,直到找出一个空位置或查遍整个表为止。
② 二次探测再散列:di为12,-12,2,-22,3,-32,…,k,- k2 (k≤m/2),即冲突发生时,在表的前后位置进行跳跃式探测。
5.除留余数法
除留余数法是指取关键字被某个不大于哈希表表长m的数p除后所得余数 作为哈希地址,即 H(key)=key%p (p≤m) 例如,已知关键字序列为{23,49,70,68,50,90},对于表长 为20的哈希表,选取p=19,计算所得的哈希地址如下表所示。
6.随机数法
选择一个随机函数为哈希函数,取关键字的随机函数值为它的哈希地 址,即H(key)=random(key) 其中,random()为随机函数。 随机数法适用于关键字长度不等的情况。
三、处理冲突的方法
所谓处理冲突是指,当由关键字计算出 的哈希地址出现冲突时,为该关键字对 应的数据元素找到另一个“空”的哈希 地址。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

哈希表查找不成功怎么计算?解答:先建好表,然后可以算出每个位置不成功时的比较次数之和,再除以表空间个数!例如:散列函数为hash(x)=x MOD 13,用线性探测,建立了哈希表之后,如何求查找不成功时的平均查找长度!?地址:0 1 2 3 4 5 6 7 8 9 10 11 12数据: 39 1228154244 625-- 36- 38成功次数: 1 3 1 2 2 1 191 1不成功次数:98 7 65 4 3 2 1 1 2 110查找成功时的平均查找长度:ASL=(1+3+1+2+2+1+1+9+1+1)/10 =2.2查找不成功时的平均查找长度:ASL=(9+8+7+6+5+4+3+2+1+1+2+1+10)/13=4.54说明:第n个位置不成功时的比较次数为,第n个位置到第1个没有数据位置的距离。

至少要查询多少次才能确认没有这个值。

(1)查询hash(x)=0,至少要查询9次遇到表值为空的时候,才能确认查询失败。

(2)查询hash(x)=1,至少要查询8次遇到表值为空的时候,才能确认查询失败。

(3)查询hash(x)=2,至少要查询7次遇到表值为空的时候,才能确认查询失败。

(4)查询hash(x)=3,至少要查询6次遇到表值为空的时候,才能确认查询失败。

(5)查询hash(x)=4,至少要查询5次遇到表值为空的时候,才能确认查询失败。

(6)查询hash(x)=5,至少要查询4次遇到表值为空的时候,才能确认查询失败。

(7)查询hash(x)=6,至少要查询3次遇到表值为空的时候,才能确认查询失败。

(8)查询hash(x)=7,至少要查询2次遇到表值为空的时候,才能确认查询失败。

(9)查询hash(x)=8,至少要查询1次遇到表值为空的时候,才能确认查询失败。

(10)查询hash(x)=9,至少要查询1次遇到表值为空的时候,才能确认查询失败。

(11)查询hash(x)=10,至少要查询2次遇到表值为空的时候,才能确认查询失败。

(12)查询hash(x)=11,至少要查询1次遇到表值为空的时候,才能确认查询失败。

(13)查询hash(x)=12,至少要查询10次遇到表值为空(循环查询顺序表)的时候,才能确认查询失败。

下面看下2010年2010年全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业基础综合试题中一个考哈希表的题。

Question1:将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中。

散列表的存储空间是一个下标从0开始的一维数组,散列函数为:H(key) = (keyx3) MOD 7,处理冲突采用线性探测再散列法,要求装填(载)因子为0.7。

(1) 请画出所构造的散列表。

(2) 分别计算等概率情况下查找成功和查找不成功的平均查找长度。

Ans:(1).首先明确一个概念装载因子,装载因子是指所有关键子填充哈希表后饱和的程度,它等于关键字总数/哈希表的长度。

根据题意,我们可以确定哈希表的长度为 L = 7/0.7 = 10;因此此题需要构建的哈希表是下标为0~9的一维数组。

根据散列函数可以得到如下散列函数值表。

H(Key) = (keyx3) MOD 7, 例如key=7时, H(7) = (7x3)%7 = 21%7=0,其他关键字同理。

Key 7 8 30 11 18 9 14H(Key) 0 3 6 5 5 6 0(表1)采用线性探测再散列法处理冲突,所构造的散列表为:地址 0 1 2 3 4 5 6 7 8 9关键字 7 14 8 11 30 18 9(表2)下面对散列表的构造方式加以说明,注意表1中的关键字7和14,30和9, 11和18,这三组关键子的H(Key)值相同,这在构建散列表时就会产生冲突,因为他们的地址相同,所以要通过一定的冲突处理方法来解决这个问题。

依题,采用线性探测再散列法处理冲突。

下面详细介绍如何构建散列表:第一个key 7,它的地址是0,因此放到散列表的数组下表为0的位置,这个位置上没有关键字,因此没有冲突可以直接填入;第二个key 8,它的地址是3,因此放到散列表的数组下表为3的位置,这个位置上没有关键字,因此没有冲突可以直接填入;第三个key 30,它的地址是6,因此放到散列表的数组下表为6的位置,这个位置上没有关键字,因此没有冲突可以直接填入;第四个key 11,它的地址是5,因此放到散列表的数组下表为5的位置,这个位置上没有关键字,因此没有冲突可以直接填入;第五个key 18,它的地址是5,因此放到散列表的数组下表为5的位置,但这个位置上已经有关键字11,遇到了冲突,此时我们根据线性探测再散列法来处理这个冲突,探测下一个位置6, 6这个位置上已经存在关键字30则继续增加步长1,因此现在的新地址应为7,位置7上没有关键字,放入即可,到此冲突已经解决;第六个key 9,它的地址是6,因此放到散列表的数组下表为6的位置,但这个位置上已经有关键字30,遇到了冲突,探测下一个位置7, 7这个位置上已经存在关键字18则继续增加步长1,因此现在的新地址应为8,位置8上没有关键字,放入即可;第七个key 14,它的地址是0,因此放到散列表的数组下表为0的位置,但这个位置上已经有关键字7,遇到了冲突,探测下一个位置1, 位置1上没有关键字,放入即可;到这一步所有关键字均已填入,散列表已经构造完成,如表2所示。

(2)等概率情况下查找成功平均查找长度:这一问可以根据第一问的构造过程求解:key7一次就填入了表中,因此查找次数为1,同理8, 30, 11查找次数均为1; key18 进行了3次放入操作,探测位置分别是5,6,7 ,因此查找次数为3;key9也是3次;key14 进行了两次探测,因此查找次数为2。

次数表如表3所示Key 7 8 30 11 18 9 14Count 1 1 1 1 3 3 2(表3)所以ASLsuccess= (1+1+1+1+3+3+2)/ 7 = 12/7。

等概率情况下查找不成功的平均查找长度:接下来讨论不成功的情况, 看表2,计算查找不成功的次数就直接找关键字到第一个地址上关键字为空的距离即可,但根据哈希函数地址为MOD7,因此初始只可能在0~6的位置。

等概率情况下,查找0~6位置查找失败的查找次数为:看地址0,到第一个关键字为空的地址2的距离为3,因此查找不成功的次数为3.地址1,到第一个关键为空的地址2的距离为2,因此查找不成功的次数为2.地址2,到第一个关键为空的地址2的距离为1,因此查找不成功的次数为1.地址3,到第一个关键为空的地址4的距离为2,因此查找不成功的次数为2.地址4,到第一个关键为空的地址4的距离为1,因此查找不成功的次数为1.地址5,到第一个关键为空的地址2(注意不是地址9,因为初始只可能在0~6之间,因此循环回去)的距离为5,因此查找不成功的次数为5.地址6,到第一个关键为空的地址2(注意不是地址9,因为初始只可能在0~6之间,因此循环回去)的距离为4,因此查找不成功的次数为4.因此查找不成功的次数表如下表所示Key 7 8 30 11 18 9 14Count 3 2 1 2 1 5 4(表4)所以ASLunsuccess= (3+2+1+2+1+5+4)/ 7 = 18/7。

哈希表链地址法平均查找长度十二月 28th, 2010 Mr.li1796∙chaining∙DS∙HashTable哈希函数为:H(key)=key mod 11关键字为:{1 13 12 34 38 33 27 22}1mod11=1,所以数据1是属于地址113mod11=2,所以数据13是属于地址212mod11=1,所以数据12也是属于地址1(这个数据是数据1指针的另一个新数据)34mod11=1,所以数据34是属于地址1(这个数据是数据12指针的另一个新数据)38mod11=5,所以数据38是属于地址533mod11=0,所以数据33是属于地址027mod11=5,所以数据27是属于地址5,(这个数据是数据38指针的另一个新数据)22mod11=0,所以数据22是属于地址0,(这个数据是数据33指针的另一个新数据)链地址法处理冲突构造所得的哈希表如下:0 -> 22 -> 33^1 -> 1 -> 12 -> 34^2 -> 13^3^4^5 -> 27 -> 38^6^7^8^9^10^查找成功时: ASL=(1×4+2×3+3×1)/8=13/8其中红色标记为查找次数。

也就是说,需查找1次找到的有4个,其它以此类推…查找不成功时:ASL=(3+4+2+1+1+3+1+1+1+1+1)/11=19/11以第一个3为例,其对应于0地址位,确定查找不成功需比较3次,其它以此类推….链式处理冲突怎么求不成功的平均查找长度1 34 6723 584 26 48 815 9367 6889 75这个貌似不同的教材有不同的计算结果,不过运算方法是相同的。

第一列的数据时需要比较一次的,包括34、58、26等以及2、6、8这三个位置。

其中除了这三个位置外是查找成功比较一次,而这三个位置是查账不成功的。

另外,3、5、7、9这几个位置是需要比较两次才知道查找不成功的;同理,1位置查找不成功比较3次,4位置比较4次。

所以有ASL=(1X3+2X4+3X1+4X1)/9=18/9下面看下2010年2010年全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业基础综合试题中一个考哈希表的题。

Question1:将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中。

散列表的存储空间是一个下标从0开始的一维数组,散列函数为: H(key) = (keyx3) MOD 7,处理冲突采用线性探测再散列法,要求装填(载)因子为0.7。

(1) 请画出所构造的散列表。

(2) 分别计算等概率情况下查找成功和查找不成功的平均查找长度。

Ans:(1).首先明确一个概念装载因子,装载因子是指所有关键子填充哈希表后饱和的程度,它等于关键字总数/哈希表的长度。

根据题意,我们可以确定哈希表的长度为 L = 7/0.7 = 10;因此此题需要构建的哈希表是下标为0~9的一维数组。

根据散列函数可以得到如下散列函数值表。

H(Key) = (keyx3) MOD 7, 例如key=7时, H(7) = (7x3)%7 = 21%7=0,其他关键字同理。

Key 7 8 30 11 18 9 14H(Key) 0 3 6 5 5 6 0(表1)采用线性探测再散列法处理冲突,所构造的散列表为:地址 0 1 2 3 4 5 6 7 8 9关键字 7 14 8 11 30 18 9(表2)下面对散列表的构造方式加以说明,注意表1中的关键字7和14,30和9, 11和18,这三组关键子的H(Key)值相同,这在构建散列表时就会产生冲突,因为他们的地址相同,所以要通过一定的冲突处理方法来解决这个问题。

相关文档
最新文档