数据结构-散列查找

判断题

1.将M个元素存入用长度为S的数组表示的散列表,则该表的装填因子为M/S

T
    
F

2.在散列中,函数“插入”和“查找”具有同样的时间复杂度。

T
    
F

3.在散列表中,所谓同义词就是被不同散列函数映射到同一地址的两个元素。

T
    
F

4.采用平方探测冲突解决策略(hi(k)=(H(k)+i2)%11, 注意:不是±i2),将一批散列值均等于2的对象连续插入一个大小为11的散列表中,那么第4个对象一定位于下标为0的位置。

T
    
F

5.若用平方探测法解决冲突,则插入新元素时,若散列表容量为质数,插入就一定可以成功。

T
    
F

6.即使把2个元素散列到有100个单元的表中,仍然有可能发生冲突。

T
    
F

选择题

1.在散列表中,所谓同义词就是:

A.两个意义相近的单词

B.具有相同散列地址的两个元素

C.被映射到不同散列地址的一个元素

D.被不同散列函数映射到同一地址的两个元素

2.在下列查找的方法中,平均查找长度与结点个数无关的查找方法是:

A.顺序查找

B.二分法

C.利用哈希(散列)表

D.利用二叉搜索树

3.对包含N个元素的散列表进行查找,平均查找长度为:

A.O(1)

B.O(logN)

C.O(N)

D.不确定

不确定是否会发生冲突

4.(neuDS)若结点的存储地址与其关键字之间存在某种映射关系,则称这种存储结构为( )。

A.顺序存储结构

B.链式存储结构

C.索引存储结构

D.散列存储结构

5.将M个元素存入用长度为S的数组表示的散列表,则该表的装填因子为:

A.S+M

B.M?S

C.M×S

D.M/S

6.对哈希(HASH)函数H(k)= k MOD m, 一般来说,m应取

A.素数

B.很大的数

C.偶数

D.奇数

m如果不是质数,会导致数据分布集中在几个点中

7.一个哈希函数被认为是“好的”,如果它满足条件()。

A.哈希地址分布均匀

B.满足(B)和(C)

C.保证不产生冲突

D.所有哈希地址在表长范围内

8.散列函数有一个共同性质,即函数值应按() 取其值域的每一个值。

A.最小概率

B.最大概率

C.平均概率

D.同等概率

9.下面关于哈希查找的说法正确的是()。

A.不存在特别好的哈希函数,要视情况而定

B.除留余数法是所有哈希函数中最好的

C.哈希函数构造得越复杂越好,因为这样随机性好,冲
突小

D.若需在哈希表中删去一个元素,不管用何种方法解决
冲突都只要简单的将该元素删去即可

10.哈希表的平均查找长度是()的函数。

A.哈希表的长度

B.哈希表的装填因子

C.哈希函数

D.表中元素的多少

11.将10个元素散列到100000个单元的哈希表中,是否一定产生冲突?

A.一定会

B.可能会

C.一定不会

D.有万分之一的可能会

12.设散列表的地址区间为[0,16],散列函数为H(Key)=Key%17。采用线性探测法处理冲突,并将关键字序列{ 26,25,72,38,8,18,59 }依次存储到散列表中。元素59存放在散列表中的地址是:

A.8

B.9

C.10

D.11

13.假定有K个关键字互为同义词,若用线性探测法把这K个关键字存入散列表中,至少要进行多少次探测?

A.K?1

B.K

C.K+1

D.K(K+1)/2

14.采用线性探测法解决冲突时所产生的一系列后继散列地址:

A.必须大于等于原散列地址

B.必须小于等于原散列地址

C.可以大于或小于但不等于原散列地址

D.对地址在何处没有限制

15.将元素序列{18,23,11,20,2,7,27,33,42,15}按顺序插入一个初始为空的、大小为11的散列表中。散列函数为:H(Key)=Key%11,采用线性探测法处理冲突。问:当第一次发现有冲突时,散列表的装填因子大约是多少?

A.0.27

B.0.45

C.0.64

D.0.73

16.给定散列表大小为11,散列函数为H(Key)=Key%11。采用平方探测法处理冲突:hi(k)=(H(k)±i2)%11将关键字序列{ 6,25,39,61 }依次插入到散列表中。那么元素61存放在散列表中的位置是:

A.5

B.6

C.7

D.8

17.给定散列表大小为11,散列函数为H(Key)=Key%11。按照线性探测冲突解决策略连续插入散列值相同的4个元素。问:此时该散列表的平均不成功查找次数是多少?

A.1

B.4/11

C.21/11

D.不确定

查找不成功的意思是在一次不成功查找中,除了最后一次检查以外,其他每次都要检查一个被占用但并不包含所求关键字的槽。

设Ci为第i次查找不成功的次数,那么则有:

\[\color{red}{ASL_{unsucc} = \frac{\sum\limits_{i=1}^{n}C_{i}}{n}}\]

18.若用平方探测法解决冲突,则插入新元素时,以下陈述正确的是:

A.插入一定可以成功

B.插入不一定能成功

C.插入一定不能成功

D.若散列表容量为质数,插入就一定可以成功

19.散列冲突可以被描述为:

A.两个元素除了有不同键值,其它都相同

B.两个有不同数据的元素具有相同的键值

C.两个有不同键值的元素具有相同的散列地址

D.两个有相同键值的元素具有不同的散列地址

20.若N个关键词被散列映射到同一个单元,并且用分离链接法解决冲突,则找到这N个关键词所用的比较次数为:

A.N(N+1)/2

B.N(N?1)/2

C.N+1

D.N

21.采用线性探测冲突解决策略,hi(k)=(H(k)+i)mod 11,将散列函数值分别等于2、2、3、3的四个对象a1、a2、a3、a4都插入一个大小为11的空散列表(哈希表)中。在不同的插入顺序中,哪句有关插入后散列表平均成功查找长度的判断是错的?

A.按a1、a2、a3、a4顺序和按a1、a3、a4、a2
顺序,平均成功查找长度一样;

B.按a1、a3、a2、a4顺序和按a3、a1、a2、a4顺序,平
均成功查找长度一样;

C.按a1、a3、a2、a4顺序和按a4、a1、a2、a3顺序,平
均成功查找长度一样;

D.按任何插入顺序,其平均成功查找长度都一样.

22.__是HASH查找的冲突处理方法:

A.求余法

B.平方取中法

C.二分法

D.开放地址法

23.下面关于哈希查找的说法,不正确的是( )。

A.采用链地址法处理冲突时,查找一个元素的
时间是相同的

B.采用链地址法处理冲突时,若插入规定总是在链首,
则插入任一个元素的时间是相同的

C.用链地址法处理冲突,不会引起二次聚集现象

D.用链地址法处理冲突,适合表长不确定的情况

一次处理冲突过后,可能会影响其他元素的查找时间。

24.给定输入序列 {4371, 1323, 6173, 4199, 4344, 9679, 1989} 以及散列函数 h(X)=X%10。如果用大小为10的散列表,并且用分离链接法解决冲突,则输入各项经散列后在表中的下标为:(-1表示相应的插入无法成功)

A.1, 3, 3, 9, 4, 9, 9

B.1, 3, 4, 9, 7, 5, -1

C.1, 3, 4, 9, 5, 0, 8

D.1, 3, 4, 9, 5, 0, 2

25.给定输入序列 {4371, 1323, 6173, 4199, 4344, 9679, 1989} 以及散列函数 h(X)=X%10。如果用大小为10的散列表,并且用线性探测解决冲突,则输入各项经散列后在表中的下标为:(-1表示相应的插入无法成功)

A.1, 3, 3, 9, 4, 9, 9

B.1, 3, 4, 9, 7, 5, -1

C.1, 3, 4, 9, 5, 0, 8

D.1, 3, 4, 9, 5, 0, 2

26.给定输入序列 {4371, 1323, 6173, 4199, 4344, 9679, 1989} 以及散列函数 h(X)=X%10。如果用大小为10的散列表,并且用平方探测解决冲突,则输入各项经散列后在表中的下标为:(-1表示相应的插入无法成功)

A.1, 3, 3, 9, 4, 9, 9

B.1, 3, 4, 9, 7, 5, -1

C.1, 3, 4, 9, 5, 0, 8

D.1, 3, 4, 9, 5, 0, 2

27.给定输入序列 {4371, 1323, 6173, 4199, 4344, 9679, 1989} 以及散列函数 h(X)=X%10。如果用大小为10的散列表,并且用开放定址法以及一个二次散列函数h2(X)=7?(X%7)解决冲突,则输入各项经散列后在表中的下标为:(-1表示相应的插入无法成功)

A.1, 3, 3, 9, 4, 9, 9

B.1, 3, 4, 9, 7, 5, -1

C.1, 3, 4, 9, 5, 0, 8

D.1, 3, 4, 9, 5, 0, 2

开放定址法公式:

\[\color{red}{h_{i}(key) = (h(key) +d_{i})\space mod\space TableSize}\]

二次散列函数的作用是当冲突发生时,代替di

28.给定散列表大小为17,散列函数为H(Key)=Key%17。采用平方探测法处理冲突:hi(k)=(H(k)±i2)%17将关键字序列{ 6, 22, 7, 26, 9, 23 }依次插入到散列表中。那么元素23存放在散列表中的位置是:

A.0

B.2

C.6

D.15

29.给定散列表大小为17,散列函数为H(Key)=Key%17。采用平方探测法处理冲突:hi(k)=(H(k)±i2)%17将关键字序列{ 6, 22, 7, 26, 9, 40 }依次插入到散列表中。那么元素40存放在散列表中的位置是:

A.2

B.6

C.8

D.15

30.将元素序列{18, 23, 4, 26, 31, 33, 17, 39}按顺序插入一个初始为空的、大小为13的散列表中。散列函数为:H(Key)=Key%13,采用线性探测法处理冲突。问:当第一次发现有冲突时,散列表的装填因子大约是多少?

A.0.54

B.0.63

C.0.31

D.0.62

31.给定散列表大小为11,散列函数为H(Key)=Key%11。按照线性探测冲突解决策略连续插入散列值相同的5个元素。问:此时该散列表的平均不成功查找次数是多少?

A.26/11

B.5/11

C.1

D.不确定

同17题。

32.现有长度为 7、初始为空的散列表HT,散列函数H(k)=k%7,用线性探测再散列法解决冲突。将关键字 22, 43, 15 依次插入到HT后,查找成功的平均查找长度是:

A.1.5

B.1.6

C.2

D.3

查找成功的意思是在一次成功查找中,除了最后一次检查以外,其他每次都要检查一个不被占用的槽。

设Ci为第i次查找成功的次数,那么则有:

\[\color{red}{ASL_{unsucc} = \frac{\sum\limits_{i=1}^{n}C_{i}}{n}}\]

33.现有长度为 11 且初始为空的散列表 HT,散列函数是 H(key)=key%7,采用线性探查(线性探测再散列)法解决冲突。将关键字序列 87,40,30,6,11,22,98,20 依次插入到 HT 后,HT 查找失败的平均查找长度是:

A.4

B.5.25

C.6

D.6.29

这道题需要注意的是,在计算查找失败的平均查找长度的时候,是不需要把下标6以后的元素计算进去的,因为散列函数根本映射不到位置7。

34.设数字 {4371, 1323, 6173, 4199, 4344, 9679, 1989} 在大小为10的散列表中根据散列函数 h(X)=X%10得到的下标对应为 {1, 3, 4, 9, 5, 0, 2}。那么继续用散列函数 “h(X)=X%表长”实施再散列并用线性探测法解决冲突后,它们的下标变为:

A.11, 3, 13, 19, 4, 0, 9

B.1, 3, 4, 9, 5, 0, 2

C.1, 12, 9, 13, 20, 19, 11

D.1, 12, 17, 0, 13, 8, 14

原文地址:https://www.cnblogs.com/nonlinearthink/p/11044752.html

时间: 2024-10-12 20:03:36

数据结构-散列查找的相关文章

数据结构学习笔记07散列查找

1.散列表(Hash) 查找的本质: 已知对象找位置. 有序安排对象:全序.半序 直接“算出”对象位置:散列 时间复杂度几乎是常量:O(1),即查找时间与问题规模无关 散列查找法的两项基本工作: 计算位置:构造散列函数确定关键词存储位置: 解决冲突:应用某种策略解决多个关键词位置相同的问题 散列(Hashing) 的基本思想是: ①以关键字key为自变量,通过一个确定的函数 h(散列函数),计算出对应的函数值h(key),作为数据对象的存储地址. ②可能不同的关键字会映射到同一个散列地址上,即h

查找之散列查找(哈希表)

本学习笔记部分内容来自网易云课堂浙江大学数据结构课程,谢谢! 1.散列表(哈希表) 已知的几种查找方法: 顺序查找  O(N) 二分查找(静态查找)  O(logN) 二叉搜索树      O(h)  h为二叉树高度   (动态查找:有插入有删除有查找) 平衡二叉树      O(logN) 查找的本质:已知对象找位置 1.有序安排对象:全序或半序: 2.直接算出对象位置:散列. 散列查找法的两项基本工作: 1.计算位置:构造散列函数确定关键词存储位置: 2.解决冲突:应用某种策略解决多个关键词

数据结构--散列排序--散列表

散列表 散列查找,我们又回到了查找, 编译的时候,涉及变量及属性的管理: 插入:新变量的定义 查找:变量的引用 实际上是动态查找问题,查找树AVL树. 两个变量名(字符串)比较效率不高.字符串的比较要一个一个的比下去,时间会比较长, 是否可以把字符串转换成数字,再处理,就快多了.就是散列查找的思想. 已知的查找方法: 顺序查找                                          O(N) 二分查找(静态查找,不适合动态查找)   O(log2N) 二叉搜索数    

散列查找

编译处理时,涉及变量及属性的管理 :插入(新变量的定义),查找(变量的引用). 顺序查找  O(N)    二分查找 O(logN)    二叉树查找O(H)     平衡二叉树 O(logN) 如何快速查找? 查找的本质:已知对象找位置 有序的安排对象-> 全序:顺序查找  半序:二叉树 直接算出位置-> 散列查找 散列查找:1.计算位置.2.解决冲突. 1计算位置 构造散列函数.  要求:计算简单:地址分布均匀. 数字关键词:1 直接定值.2 除留余数 h(key)= key mod p,

数据结构——散列(一)

二叉树提供了对一组数据进行各种操作的强大功能,特别是在处理有序数据时二叉查找树非常方便.例如FindMax和FindMin操作,在表数据结构中这两个操作时间复杂度为O(N),但在二叉查找树中这两个操作只需要O(logN)的时间复杂度.但在很多情况下,数据的顺序并不是应用所关心的问题.这一类应用只需要插入,删除,查找这些基本的操作,此时使用二叉树数据结构进行这些操作的时间复杂度也为O(logN),当数据量很大时,这样的操作非常耗时.为了解决这个问题,提出了一种可以在常数时间复杂度情况下进行插入,删

常见基本数据结构——散列

散列表的实现通常叫做散列.散列是一种用于以常数平均时间执行插入.删除和查找的技术.但是任何排序的信息都不会得到有效的支持.所以FindMax(),FindMin(),以及以线性时间打印的操作都是散列所不支持的. 理想的散列表数据结构值不过是一个包含有关键字的具有固定大小的数组. 关键字映射的函数叫做散列函数,通常散列函数应该运算简单并且保证任何两个不同的关键字映射到不同的单元.不过这是不可能的,因为单元的数目是有限的,然而关键字是用不完的.因此,我们寻找一个散列函数,该函数要在单元之间均匀的分配

散列查找的查找插入及冲突处理方法

处理冲突的方法 1.换个位置:开放地址法 2.同一位置的冲突对象组织在一起:链地址法 开放地址法(Open Addressing): 一旦产生了冲突(该地址已有其他元素),就按某种规则去寻找另一空地址 若发生了第i次冲突,试探的下一个地址将增加di, 基本公式: hi(key) = (h(key)+di) mod TableSize (1≤i<TableSize) di决定了不同解决冲突方案:线性探测.平方探测.双散列 线性探测:di = i +1 +2 +3 平方探测:di = ±i^2 +1

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

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

数据结构--散列(分离链接法解决冲突)

散列方法的主要思想是根据结点的关键码值来确定其存储地址:以关键码值K为自变量,通过一定的函数关系h(K)(称为散列函数),计算出对应的函数值来,把这个值解释为结点的存储地址,将结点存入到此存储单元中.检索时,用同样的方法计算地址,然后到相应的 单元里去取要找的结点.通过散列方法可以对结点进行快速检索.散列(hash,也称"哈希")是一种重要的存储方式,也是一种常见的检索方法. 因此,散列函数更像是一种映射,散列函数的选择有很多种,下面以散列函数为关键值对10取余为例,说明散列的插入关键