数据结构与算法2 哈希表

基础知识 

具体实现

关于哈希表,在python中,dict()和set()就是基于哈希表来实现对于字典的存储和管理,

在CPP中,std ::unordered_map和 std::unordered_set 就是基于哈希表的实现, 而std::set 则是基于红黑树的实现。

使用哈希表来存储和查找元素,能够在平均情况下实现 O(1) 的查找、插入和删除操作。

开销

overhead of hashmap

  • 插入开销;哈希表在元素增加时,会动态扩展桶数组的大小。通常哈希表在装载因子超出设定值时会将数组大小加倍。这种扩展涉及重新计算每个元素的哈希值并将它们插入新的桶数组中,这一过程非常耗时且会临时占用较多内存。
  • 删除开销:在开放寻址法中,删除元素后,槽位不能直接标记为空,否则会打乱查找的过程。因此,删除后的槽位通常会标记为“删除”状态(也叫“墓碑”标记)。这些标记会占用额外空间,并在查找和插入操作中带来额外的处理逻辑。
  • 缓存开销:与数组或树等数据结构相比,哈希表的元素分布在内存中的位置较为随机,因此在遍历时容易出现缓存未命中(cache miss)。这会导致 CPU 频繁从较慢的主存中读取数据,影响性能。
  • 计算开销:每次插入、查找或删除元素时,都需要计算键的哈希值。哈希函数的计算复杂度取决于数据类型。对整数或字符串来说,哈希函数计算相对简单;但对复杂对象(如自定义类型)来说,哈希计算会消耗更多时间。

算法题

128.  最长连续序列. - 力扣(LeetCode)

560.  和为 K 的子数组

本题值得一说,利用哈希表存储key为前缀和,value为前缀和出现的次数,并且持续记录出现次数最多的前缀和。

参考链接:

数据结构学习②--哈希表-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值