25版王道数据结构课后习题详细分析 第七章 7.5 散列表

本文主要是介绍25版王道数据结构课后习题详细分析 第七章 7.5 散列表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、单项选择题

————————————————————

————————————————————

解析:顺序查找可以是顺序存储或链式存储;折半查找只能是顺序存储且要求关键字有序;树形查找法要求采用树的存储结构,既可以采用顺序存储也可以采用链式存储;散列查找中的链地址法解决冲突时,采用的是顺序存储与链式存储相结合的方式。


正确答案:

————————————————————

————————————————————

解析:关键字集合与地址集合之间存在对应关系时,通过散列函数表示这种关系。
这样,查找以计算散列函数而非比较的方式进行查找。

正确答案:

————————————————————

————————————————————

解析:冲突(碰撞)是不可避免的,与装填因子无关,因此需要设计处理冲突的方法,Ⅰ错误。散列查找的思想是计算出散列地址来进行查找,然后比较关键字以确定是否查找成功,Ⅱ错误。散列查找成功的平均查找长度与装填因子有关,与表长无直接关系,IⅢ错误。在开放定址的情形下,不能随便删除散列表中的某个元素,否则可能会导致搜索路径被中断(因此通常的做法是在要删除的地方做删除标记,而不是直接删除),IⅣ正确。


正确答案:

————————————————————

————————————————————

解析:在开放定址法中散列到同一个地址而产生的“堆积”问题,是同义词冲突的探查序列和非同义词之间不同的探查序列交织在一起,导致关键字查询需要经过较长的探测距离,降低了散列的效率。因此要选择好的处理冲突的方法来避免“堆积”。


正确答案:

————————————————————

————————————————————

解析:平方探测法采用的增量序列是非线性的,它可以跳过一些已被占用的单元,而不是顺序地探测下一单元,这样能减小冲突的概率,Ⅰ正确。散列地址i的关键字,和为解决冲突形成的某次探测地址为i的关键字,都争夺地址i, i+1,…,因此不一定相邻,错误。IⅢ正确。同义词冲突不等于聚集,链地址法处理冲突时将同义词放在同一个链表中,不会引起聚集现象,Ⅳ错误。


正确答案:

————————————————————

————————————————————

解析:



正确答案:

————————————————————

————————————————————

解析:K个关键字在依次填入的过程中,只有第一个不会发生冲突,所以探测次数为1+2+3十…+K=K(K+1)/2。


正确答案:

————————————————————

————————————————————

解析:散列表的平均查找长度与装填因子α直接相关,表的查找效率不直接依赖于表中已有表项个
数n或表长m。若表中存放的记录全是筹个地址的团义词。则平均直找长度为n面作ON1)。

正确答案:

————————————————————

————————————————————

解析:
聚集是因选取不当的处理冲突的方法,而导H不同关键字的元素对团一敏列地址进行争夺的现象。用线性探查法时,容易引发聚集现织。


正确答案:

————————————————————

————————————————————

解析:“下一个空位”可以大于或小于但不邻于原散列地址。等于原腴列地址是没有意义约。


正确答案:

————————————————————

————————————————————

解析:由散列函数计算可知,14,1,27,79散列后的地址都是1,所以有4个记录。


正确答案:

————————————————————

————————————————————

解析:因为在链地址法中,映射到同一地址的关键字都会链到与此地址相对应的链表上,所以探测过程一定是在此链表上进行的,从而这些位置上的关键字均为同义词;但在线性探测法中出现两个同义关键字时,会把该关键字对应地址的下一个地址也占用掉,两个地址分别记为Addr、Addr+1,查找一个满足H(key) =Addr+1的关键字key时,显然首次探测到的不是key的同义词。


正确答案:

————————————————————

————————————————————

解析:H的取值有17种可能,对应到不同的链表中,所以链表的个数应为17。由于H(key)的取值范围是0~16,所以数组下标为0~16。


正确答案:

————————————————————

————————————————————

解析:线性探测法的公式为H=(H(key)+d;)%m,其中d,=1,2…, m-1。日(49)=49%11=5,有冲突;H=(H(49)+1)%14=6,有冲突;H=(H(49)+2)%14=7,有冲突;H=(H (49)+3)号14=8,无冲突。


正确答案:

————————————————————

————————————————————

解析:插入过程如下:H(26)=9,不冲突;日(25)=8,不冲突;H(72)=4,不冲突;H(38)=4,冲突,冲突处理后的地址为5;H(8)=8,冲突,冲突处理后的地址为10;H(18)=l,不冲突;H (59)=8,冲突,冲突处理后的地址为11。因此,在表中查找59需要探查4次。


正确答案:

————————————————————

————————————————————

解析:



正确答案:

————————————————————

————————————————————

解析:由于散列函数的选取,仍然有可能产生地址冲突,冲突不能绝对地避免。


正确答案:

————————————————————

————————————————————

解析:散列表的查找效率取决于散列函数、处理冲突的方法和装填因子。显然,冲突的产生概率与装填因子(即表中记录数与表长之比)的大小成正比,Ⅰ与题意相反。I显然正确。采用合适的冲突处理方法可避免聚集现象,也将提高查找效率,Ⅲ正确。例如,用链地址法处理冲突时不存在聚集现象,用线性探测法处理冲突时易引起聚集现象。


正确答案:

————————————————————

————————————————————

解析:堆积现象因冲突而产生,它对存储效率、散列函数和装填因子均不会有影响而平均查找长度会因为堆积现象而增大。散列函数是指将关键字映射到哈希地址的函数。存储效率和装填(装
载)因子的定义相同,指哈希表中已存储的元素个数与哈希表长度的比值。这些因素都与堆积象无关,而只与哈希表的结构和设计有关。


正确答案:

————————————————————

————————————————————

解析:

正确答案:

————————————————————

————————————————————

解析:

正确答案:

————————————————————

————————————————————

解析:原题再现。填装因子越大,说明哈希表中存储的元素越满,发生冲突的可能性就越高,导致平均查找长度越大。散列函数、冲突解决策略也会影响发生冲突的可能性。I、、Ⅲ都正确。

正确答案:

————————————————————

————————————————————

解析:

正确答案:

二、综合应用题

————————————————————

————————————————————

解答:在散列表中删除一个记录,在拉链法情况下可以物理地删除。但在开放定址法情况下,不能物理地删除,只能做删除标记。该地址可能是该记录的同义词查找路径上的地址,物理地删除就中断了查找路径,因为查找时碰到空地址就认为是查找失败。

这篇关于25版王道数据结构课后习题详细分析 第七章 7.5 散列表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1140683

相关文章

Python中DataFrame转列表的最全指南

《Python中DataFrame转列表的最全指南》在Python数据分析中,Pandas的DataFrame是最常用的数据结构之一,本文将为你详解5种主流DataFrame转换为列表的方法,大家可以... 目录引言一、基础转换方法解析1. tolist()直接转换法2. values.tolist()矩阵

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

python展开嵌套列表的多种方法

《python展开嵌套列表的多种方法》本文主要介绍了python展开嵌套列表的多种方法,包括for循环、列表推导式和sum函数三种方法,具有一定的参考价值,感兴趣的可以了解一下... 目录一、嵌套列表格式二、嵌套列表展开方法(一)for循环(1)for循环+append()(2)for循环+pyPhWiFd

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

python中列表list切分的实现

《python中列表list切分的实现》列表是Python中最常用的数据结构之一,经常需要对列表进行切分操作,本文主要介绍了python中列表list切分的实现,文中通过示例代码介绍的非常详细,对大家... 目录一、列表切片的基本用法1.1 基本切片操作1.2 切片的负索引1.3 切片的省略二、列表切分的高

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法

Python实现将实体类列表数据导出到Excel文件

《Python实现将实体类列表数据导出到Excel文件》在数据处理和报告生成中,将实体类的列表数据导出到Excel文件是一项常见任务,Python提供了多种库来实现这一目标,下面就来跟随小编一起学习一... 目录一、环境准备二、定义实体类三、创建实体类列表四、将实体类列表转换为DataFrame五、导出Da