【发布时间】:2016-02-23 04:52:45
【问题描述】:
哈希表中删除的复杂度是多少?它可以根据它的实施方式而有所不同。如果它被实现为一个连续的数组,那么我们是否在删除时压缩数组(这使得它不是 O(1))?
如果是基于双向链表的,O(1) 删除是可能的,但在这种情况下我们如何将哈希键映射到链表节点?如果它是基于树的,那么它是可以理解的 O(logN)。
但是 C++ unordered_map 中的删除和 Java 中 HashMap 的旧实现声称是 O(1)。有人可以在这里填补实施空白吗?
编辑:为简单起见,我们假设没有冲突。
【问题讨论】:
-
Java的HashMap在哪里声称有O(1)的删除时间?
-
假设没有冲突,您应该清楚删除(以及插入)是
O(1)操作。关于重新安排底层结构,即使发生这种情况,也可能不会在每次操作后发生。 -
shmosel:编辑了问题。我试图了解在没有冲突时实现 O(1) 的实现。
-
哈希表实现如何不使用数组作为底层结构?
标签: java c++ algorithm data-structures time-complexity