数据结构-散列查找

时间:2019-06-18
本文章向大家介绍数据结构-散列查找,主要包括数据结构-散列查找使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

判断题

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