Hash表、散列表、Hash算法是什么,以及应用场景 + 例题解析

Hash表是什么

Hash表(哈希表)也叫散列表。散列表用的是数组支持按照下标随机访问数据的特性,如果没有数组,就没有散列表。

比如 要存储100个学生的成绩,现在有他们的学号

如M202070023,M代表是研究生,2020代表是2020年入学的,70是学院的编号,023代表是这个学生在学院的人数编号。

我们可以只取学号的后三位,对应放入相应的数组下标下,从1到100,这样在查询的时候,就可以直接通过下标来获取,时间复杂度为O(1)

只取后三位这样的操作就叫Hash函数或者散列函数,而散列函数计算得到的值就叫作散列值(或“Hash 值”“哈希值”)。

散列函数

三点散列函数设计的基本要求:

  1. 散列函数计算得到的散列值是一个非负整数;
  2. 如果 key1 = key2,那 hash(key1) == hash(key2);
  3. 如果 key1 ≠ key2,那 hash(key1) ≠ hash(key2)。

其中第三点最难达到(比如数据量很大,又没有明显的规律),所以就会存在“散列冲突”

如果解决散列冲突

常用的解决散列冲突的方法有开放寻址法(open addressing)和链表法(chaining),这里就不展开讲了。

散列表也常常和链表一起使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值