散列表是一种重要的存储方式,在散列表里可快速进行检索。(1)散列表的基本思想是什么?(2)常用的散列函数有哪些,请举例说明(至少三个)。(3)怎样用拉链法和开地址法处理碰撞?

题目

散列表是一种重要的存储方式,在散列表里可快速进行检索。

(1)散列表的基本思想是什么?

(2)常用的散列函数有哪些,请举例说明(至少三个)。

(3)怎样用拉链法和开地址法处理碰撞?

参考答案和解析
正确答案:(1)散列表的基本思想是;由结点的关键码值决定结点的存储地址。即以关键码值k为自变量通过一定的函数关系H(称为散列函数)计算出对应的函数值H(k)来把这个值解释为结点的存储地址将结点存入该地址中去检索时按同样的方法计算出结点的地址然后到相应的地址中取结点即可。 (2)常用的散列函数有: ①除余法:即选择一个适当的正整数p(通常选p为小散列表存储区域大小的最大素数)用p去除关键码值取其余数作为地址。 ②折叠法:即将关键码值从某些地方断开分为几段折叠相加作为地址。 ③中平方法:即将关键码值平方取中间的几位数作为地址。 (3)用拉链法处理碰撞就是给散列表的每个结点增加一个link字段当碰撞发生时利用link字段拉链建立链接方式的同义词子表。每个同义词子表的第一个元素都在散列表基本区域中同义词子表的其他元素的存储又有两种解决方法一种是建立溢出区存放各同义词子表的其他元素另一种是不建立溢出区同义词子表的其他元素就存放在散列表中没有占用的单元中 用开地址法处理碰撞就是当碰撞发生时形成一个探查序列沿着这个序列逐个地址探查直到找到一个未被占用的地址将发生碰撞的关键码值存入该地址中。最简单的探查序列是线性探查即若发生碰撞的地址为d则探查的地址序列为; d+1d+2…m-101…d-1 其中m是散列表存储区域的大小另一种效果更好的探查序列是再散列探查即用第二个散列函数H2来确定探查序列若发生碰撞的地址为d则探查的地址序列为: (d+H2(k))mod m(d+2H2(k))mod m(d+3H2(k))mod m…
(1)散列表的基本思想是;由结点的关键码值决定结点的存储地址。即以关键码值k为自变量,通过一定的函数关系H(称为散列函数),计算出对应的函数值H(k)来,把这个值解释为结点的存储地址,将结点存入该地址中去,检索时,按同样的方法计算出结点的地址,然后到相应的地址中取结点即可。 (2)常用的散列函数有: ①除余法:即选择一个适当的正整数p(通常选p为小散列表存储区域大小的最大素数),用p去除关键码值,取其余数作为地址。 ②折叠法:即将关键码值从某些地方断开,分为几段,折叠相加,作为地址。 ③中平方法:即将关键码值平方,取中间的几位数作为地址。 (3)用拉链法处理碰撞就是给散列表的每个结点增加一个link字段,当碰撞发生时利用link字段拉链,建立链接方式的同义词子表。每个同义词子表的第一个元素都在散列表基本区域中,同义词子表的其他元素的存储又有两种解决方法,一种是建立溢出区,存放各同义词子表的其他元素,另一种是不建立溢出区,同义词子表的其他元素就存放在散列表中没有占用的单元中, 用开地址法处理碰撞就是当碰撞发生时形成一个探查序列,沿着这个序列逐个地址探查,直到找到一个未被占用的地址,将发生碰撞的关键码值存入该地址中。最简单的探查序列是线性探查,即若发生碰撞的地址为d,则探查的地址序列为; d+1,d+2,…,m-1,0,1,…,d-1 其中,m是散列表存储区域的大小,另一种效果更好的探查序列是再散列探查,即用第二个散列函数H2来确定探查序列,若发生碰撞的地址为d,则探查的地址序列为: (d+H2(k))mod m,(d+2H2(k))mod m,(d+3H2(k))mod m,…
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

散列法存储中处理碰撞的方法主要有:【 】和开地址法。


正确答案:拉链法
拉链法 解析:散列法存储中处理碰撞的方法主要有:拉链法和开地址法。

第2题:

假定用散列函数H1=k mod 13计算散列地址,当发生冲突时,用散列函数 H2=k mod ll+l来计算下一个探测地址的地址增量。设散列表的地址空间为0~12,在地址2、3、8中,散列表相应的内容为80,85,34。下一个被插入的关键码是42,其插入的位置是【 】。


正确答案:×
0 解析:H1=42 mod 13=3,地址3中已分配给85,所以计算H2,H2=42 mod 11+1= 10,这是地址增量。下一个探测地址应为3+10=13,13 mod 13=0,0地址为空,故42可插入在该地址中。

第3题:

● 下列有关数据存储结构的叙述中,正确的是“ (44) ”和“ (45) ”。

(44)

A. 顺序存储方式只能用于存储线性结构

B. 顺序存储方式的优点是存储密度,插入、删除运算效率高

C. 链表的每个结点中都恰好包含一个指针

D. 队列的存储方式既可以是顺序方式,也可以是链接方式

(45)

A. 散列表的结点中只包含数据元素自身的信息,不包含任何指针

B. 负载因子(装填因子)是散列法一个重要参数,它反映散列表装满程度

C. 散列法存储的基本思想是把关键字的值作为数据的存储地址

D. 在散列法中,不同的关键字值对应到不同的存储地址称作发生了冲突


正确答案:D,B

第4题:

散列法存储中处理碰撞的方法主要有两类:拉链法和 【】


正确答案:开地址法
散列法存储中处理碰撞的方法主要有两类:拉链法和开地址法

第5题:

散列法存储中处理碰撞的方法主要有两类,开地址法和【】。


正确答案:拉链法
散列存储两类处理碰撞的方法是开地址法和拉链法。

第6题:

设有两个散列函数H1(k)=kmod 13和H2(k)=kmod 11+1,散列表为T[0…12],用二次散列法解决冲突。函数H1用来计算散列地址,当发生冲突时,H2作为计算下一个探测地址的地址增量。假定某一时刻散列表的状态为:

下一个被插入的关键码为42,其插入位置应是( )。

A.0

B.1

C.3

D.4


正确答案:A

第7题:

已知一个线性表(38,25,74,63,52,48),假定采用散列函数h(key)=key%7计算散列地址,并散列存储在散列表A[0…6]中,若采用线性探测法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度为(63)。

A.1.4

B.1.6

C.2.0

D.2.2


正确答案:C
解析:按照散列函数h(key)=key%7和线性探测方法解决冲突将线性表 (38,25,74,63,52,48)散列存储在散列表A[0…6]中如图3-15所示。

在该散列表上进行等概率成功查找的平均查找长度

第8题:

以下说法错误的是()。

A.散列法存储的思想是由关键字值决定数据的存储地址

B.散列表的结点中只包含数据元素自身的信息,不包含指针

C.负载因子是散列表的一个重要参数,它反映了散列表的饱满程度

D.散列表的查找效率主要取决于散列表构造时选取的散列函数和处理冲突的方法


正确答案:B

第9题:

以下说法错误的是(42)。

A.装填因子是散列法的一个重要参数,它反映了散列表的装填程度

B.散列表的查找效率主要取决于散列表造表时选取的散列函数和处理冲突的方法

C.散列表的结点中只包含数据元素自身的信息,不包含任何指针

D.散列法存储的基本思想是由关键码值决定数据的存储地址


正确答案:C
解析:本题考查散列表的相关知识。散列表即哈希表,是由关键码值决定数据的存储地址的一种存储结构,表中的数据不仅包含自身的信息,而且还包含了一些相关的地址信息。元素的查找效率主要取决于散列表造表时选取的散列函数和处理冲突的方法。散列表的装填程度是由装填因子来体现的。

第10题:

下列问题是基于下列描述:散列表的地址区间为0~17,散列函数为H(K)=Kmod 17采用线性探测法处理冲突,并将关键字序列26、25、72、38、8、18、59依次存储到散列表中。

元素59存放在散列表中的地址是( )。

A.8

B.9

C.10

D.11


正确答案:D
解析:各元素的散列地址分别为9,8,4,4,8,1,8。在存放8这个元素时,由于这个存储位置已存放了25,根据处理冲突的方法——线性探测法,需后退一个位置到9,但9这个位置也已存放了26这个元素,所以还需移至10,10这个位置是空的,所以8就存放在10。对59,它的散列地址为8,需按上述方法依次经过8,9,10,最后到达11。

更多相关问题