java - 为什么 HashMap 中 get() 的时间复杂度为 O(1)
问题描述
哈希图中有恒定数量的桶(比方说b)
我们有 N 个元素并假设 N 非常大并且 N >> b
现在每个桶包含 N/b 个元素,假设我们的哈希函数是好的。
如果我们将桶中的元素存储为链表,那么在 N/b 个元素的列表中搜索仍然是 O(N)。即使我们假设每个桶中的元素存储为一棵树,在 N/b 个元素的树中搜索仍然是 O(logN)。
我知道每次负载因子达到阈值时 b 都会加倍。这是否使 b 本身成为 O(N)。如果是这种情况,则说明 O(1)。但是如果 b 不是 O(N) 那么我们如何解释地图上的 O(1) 操作呢?
这个词amortized
用于描述 O(1),我认为它是指平均情况而不是最坏情况。但即使在一般情况下,我也看不出它是 O(1)。
解决方案
推荐阅读
- microsoft-graph-api - 有没有办法在 MS 团队中发送活动提要通知?
- database - 如何从 sqflite 表中选择数据并显示(显示)它?
- php - php并发连接到redis超时
- c++ - post(io_context, bind_executor(strand, handler)) 和 post(strand, handler) 是否具有相同的结果?
- dialogflow-es - agent.add() 在 Google Dialogflow Fulfillment Inline Editor 中不起作用
- javascript - React 基础知识:在导出之前定义组件还是作为导出函数的参数?
- c++ - 如何从其索引中打印枚举值?
- cakephp - Cake php 迁移升级到版本 4
- flask - pymongo 查询未在烧瓶中返回任何内容
- python - 比较两个 python pandas 数据框字符串列以识别公共字符串并将公共字符串添加到新列