您的位置:首页 > 新闻 > 会展 > 数据结构与算法2 哈希表

数据结构与算法2 哈希表

2025/6/9 23:00:18 来源:https://blog.csdn.net/qq_19859865/article/details/142110775  浏览:    关键词:数据结构与算法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博客

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com