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

哈希表的平均查找长度是()的函数。
A.哈希表的长度
B.哈希表的装填因子
C.哈希函数
D.表中元素的多少

装填因子 = 关键字个数 / 表长

符号表:是 “名字(Name)–属性(Attribute)”对的集合
符号表也叫散列表(哈希表)

散列是一种重要的查找方法

它的基本思想是:以数据对象的关键字key为自变量,通过一个确定的函数关系h,计算出
对应的函数值h(key),把这个值解释为数据对象的存储地址,并按此存放,即“存储位置=h(key)”

散列方法中使用的计算函数称为**“散列函数/哈希函数”**
按这个思想构造的表称为散列表

散列函数的构造方法:
数字关键词的散列函数构造

  • 直接定址法:h(key)=a*key+b
  • 除留余数法:h(key)=key mod p
  • 数字分析法

字符串关键词的散列函数构造

处理冲突的方法:

开放地址法

线性探测法
冲突发生时,顺序查看表中下一单元,直到找出一个空单元或查遍全表
二次探测法
冲突发生时,在表的左右进行跳跃式探测,比较灵活

采用开放定址法处理冲突中的二次探测再散列(也即是题目中的二元探测法),则哈希函数变为Hash(key) = (Hash(key) + d) % 11,其中d = 12, -12, 22, -22, 32,……,则开始计算。

分离链接法
其做法就是将散列到同一个值的所有元素保存到一个表中。
双散列探测方法
对于使用平方探测的开放定址散列法,当元素填得太满的时候,操作运行的时间将消耗过长,而且插入操作有可能失败,此时则可以进行一次再散列来解决这一问题。

再散列会创建一个新的散列表,新的散列表大小为大于原散列表大小2倍的第一个素数,随后将原散列表的值重新散列至新的散列表中。

假定有K个关键字互为同义词,若用线性探测法把这K个关键字存入散列表中,至少要进行多少次探测?
A.K−1
B.K
C.K+1
D.K(K+1)/2

从一个具有N个结点的单链表中查找其值等于X的结点时,在查找成功的情况下,需平均比较多少个结点?
A.N/2
B.N
C.(N−1)/2
D.(N+1)/2

由于单链表只能进行单向顺序查找,以从第一个节点开始查找为例,查找第m个节点需要比较的节点数f(m)=m,查找成功的最好情况是第一次就查找成功,只用比较1个节点,最坏情况则是最后才查找成功,需要比较n个节点。

所以一共有n种情况,平均下来需要比较的节点为(1+2+3+…+(n-1)+n)/n=(n+1)/2。

下面关于哈希查找的说法,不正确的是( )。
A.采用链地址法处理冲突时,查找一个元素的时间是相同的
B.采用链地址法处理冲突时,若插入规定总是在链首,则插入任一个元素的时间是相同的
C.用链地址法处理冲突,不会引起二次聚集现象
D.用链地址法处理冲突,适合表长不确定的情况

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值