如何存储哈希映射?

时间:2015-05-07 08:31:19

标签: optimization hashmap hashtable

我即将面试,正在查看一些技术面试问题,我遇到了this one。它要求哈希映射的插入和删除功能的时间复杂度。共识似乎是时间复杂度为O(1),如果有地图均匀分布,而O(n)如果它们都在同一个池中。

我想我的问题是哈希映射究竟是如何存储在内存中的?这两起案件将如何发生?

1 个答案:

答案 0 :(得分:1)

链接页面上的一个答案是:

  如果即使没有正确分配,

插入总是O(1)(如果我们   在碰撞时制作链表)但删除最差的是O(n)   情况下。

这不是一个好的答案。对散列映射的时间复杂度的一般化答案将与Wikipedia article on hash tables

类似
Time complexity
in big O notation

          Average   Worst case
Space     O(n)      O(n)
Search    O(1)      O(n)
Insert    O(1)      O(n)
Delete    O(1)      O(n)

要解决你的问题哈希映射是如何存储在内存中的:有许多"桶和#34;以平均情况存储值,但在发生哈希冲突时必须扩展为某种列表。哈希表的好解释是维基百科文章this SO questionthis C++ example.

上面的时间复杂度表是这样的,因为在一般情况下,哈希映射只是查找并存储单个值,但是在最坏的情况下,冲突会使所有元素共享O(n),其中所有元素共享一个桶和行为类似于您为该案例选择的列表实现。

请注意,有一些专门的实现来解决这里最糟糕的情况,也在维基百科文章中有所描述,但每个都有其他缺点,所以你必须为你的用例选择最好的。