是在哈希表O(1)中查找?

时间:2014-11-25 13:18:41

标签: complexity-theory

如果哈希表包含N个不同的项,并且没有重载,则N个项的哈希值必须大约为lg(N)位,否则太多项将获得相同的哈希值。

但是哈希表查找通常被认为平均花费O(1)时间。

在O(1)时间内无法生成lg(N)位,因此哈希表复杂性的标准结果是错误的。

我的推理出了什么问题?

3 个答案:

答案 0 :(得分:9)

你的推理出现的问题是使用了#34; time"的冲突定义。

当人们说哈希表中的查找花费O(1)时间时,通常意味着它需要进行O(1)比较,即查找项目所需的比较次数以常数为界。在" time"的这个想法下,用于计算哈希的实际时间(如你用秒测量的东西)不会产生任何变化。

比较中的测量时间是一种近似值,虽然它可能无法以秒为单位测量现实,但仍然提供有关哈希表行为的有用信息。

对于算法的大多数渐近复杂性描述,这类事情都是正确的:人们经常使用" time"具有非常抽象的含义并不是" time"的非正式含义,但通常是"操作次数的一些变化" (这种操作通常没有说明,预计是显而易见的,或从上下文中清楚)。

答案 1 :(得分:0)

该分析基于哈希函数是固定的并且与表中存储的元素的实际数量无关的假设。如果散列表中有N个元素,则不是说散列函数返回lg N位值,而是基于散列函数返回,例如,返回 k 位值,其中 k 独立于 N k 的典型值(例如32或64)提供的哈希表远远大于实际需要的任何哈希表。

因此,在某种意义上,是的,一个包含N个元素的表需要一个返回O(lg n)位的散列函数;但在实践中,使用的远大于lg n的预期最大值。

答案 2 :(得分:-1)

哈希表搜索是O(1)。 我认为你是混合插入(即O(n))和搜索。