哈希表相关问题

1、哈希的概念

元素的存储位置与它的关键码一一映射,在查找元素的时候不用进行比较,可以直接在表中检索出元素的值,所以查找的时间复杂度是O(1)

2、哈希冲突

不同关键字通过相同哈希数计算出相同的哈希地址

3、产生哈希冲突的原因

设计的哈希函数不够合理
(常用的哈希函数:直接的定制法,除留余数法)

4、解决哈希冲突的方法

(1)闭散列(开放定址法)
发生哈希冲突时,如果哈希表未被装满,说明哈希表中患有空位置,那么将出现冲突的元素存放在下一个空位置中
查找空位置的方法:线性探测,二次探测
线性探测:从冲突的位置开始,依次向后找,直到找到空位置停下来,插入新元素。(在哈希表中不能随便删除元素,会影响其他元素《解决办法:使用标记的伪删除》)
二次探测:通过散列函数查找需要插入元素的位置,当装填因子小于0.5时不会出现同一位置探查两次的现象
(2)开散列
利用散列函数计算出每个关键码的地址,相同地址的关键码存在有个桶中,每个桶中的元素利用单链表连接起来,各个单链表的头结点存放在哈希表中。

5、开散列与闭散列的比较

开散列处理溢出,需要增设链接指针,似乎增加了存储开销。事实上: 由于闭散列必须保持大量的空闲空间以确保查找效率,如二次探查法要求装载因子a <= 0.7,而表项所占空间又比指针大的多,所以使用开散列反而比闭散列节省存储空间

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值