hash - 一个关于HashMap的时间复杂度的问题
问题描述
这不是代码问题,我只是想了解哈希图和时间复杂度的概念。
好吧,我想我知道 hashMaps/sets 等是如何工作的,我想我理解为什么 HashMaps.get 有一个恒定的时间,但是当我们有一个非常大的 hashMap 时,存储值的索引应该重叠。当 2 个哈希码解析为相同的索引时,它们会存储在该索引处的 LinkList 中,对吗?
难道不是所有元素都作为链接列表存储在一个索引中。现在不应该在 O(n) 的最坏情况下运行 HashMap.get。
解决方案
是的,最坏情况的时间复杂度HashMap
是 O(n),其中n
是存储在一个桶中的元素数量。最坏的情况是n
HashMap 的所有元素都存储在一个桶中。
但是,如果对每个存储桶实施二进制搜索,则可以改进这一点。在这种情况下,最坏情况下的时间复杂度将O(log(n))
是binary search tree
用于存储元素而不是doubly linked list
.
推荐阅读
- google-chrome - 使用支持悬停的输入类型启动无头 Chrome
- jpa - jpa控制器和级联删除问题
- java - 使用不同的 log4j 配置(设置为调试)重新运行失败的测试?
- javascript - 是否可以使用 PHP、Javascript 跟踪我的网站用户的确切位置
- python - 基于终端的聊天应用程序给出错误:'invalid literal for int() with base 10:' 当试图从其他客户端返回消息到客户端时
- r - pROC 如何处理多级因子标签?
- angular - 不显示第一个选项以角度选择
- .net-core - 顶部有菜单的 Blazor 模板
- typescript - 如何从谷歌的位置输入字段中选择一个项目
- python - 为什么 while(n) n = n>>1 循环不会以负 n 终止