第4讲 | 数据结构与算法 | 【散列表】

本文详细介绍了散列表(哈希表)的概念,包括其基于数组的特性、散列函数的设计要求以及如何处理散列冲突。讨论了开放寻址法(线性探测、二次探测、双重探测)和链表法两种解决冲突的方法,并强调了加载因子在散列表性能中的重要性。此外,还探讨了散列表的动态扩容策略,如何在数据量增大时保持操作效率。
摘要由CSDN通过智能技术生成

- 《数据结构与算法》专栏完整版在公众号【书伟认视界】中查看,转载需联系微信【econe0219


散列表

散列表(Hash Table),也可直译为哈希表。散列表是基于数组扩展得到的一种新的数据结构,因此有延续了数组最重要的一条性质:支持按下标随机访问,时间复杂度是O(1)。

通过散列函数把元素的键值映射为下标,然后将数据存储在数组中对应下标的位置。我们熟悉的python的字典就是由散列表实现的。

散列函数:

直观定义为hash(key),key表示元素的键值,hash(key)指的就是经过散列函数得到的散列值。

用python的字典大概举个例子:

定义一个变量 student = {‘name’: ‘张三’, ‘age’: 20}
hash(‘name’)得到散列值0,即第一个位置,对应元素是’张三’;hash(‘age’)得到散列值1,对应元素是20。

因为散列表中的元素不可重复,所以散列函数的设计需要有以下三个要求:

  1. 散列函数计算得到的散列值是一个非负整数(数组下标从0开始);
  2. 如果key1≠key2,则hash(key1)≠hash(key2);
  3. 如果key1=key2,则hash(key1)=hash(key2);
散列冲突/碰撞:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值