插入和搜索时哈希表的时间复杂度

时间:2018-12-08 12:56:58

标签: algorithm time-complexity big-o hashtable

查看Wikipedia中的哈希表,它表示插入和搜索为 O(1) 。但是我担心的是,我的老师告诉我,只有查找是 O(1) ,而哈希是 O(s) ,其中 s 字符串的长度。插入和搜索不应该是 O(s) 。它说的是hash( s )+ lookup( s )= O(hashing( s )+ lookup( s ))= O( s )。

有人可以解释一下用大O表示法为哈希表编写时间复杂度的正确方法是什么,为什么?如果假设它是完美的哈希,则不会发生冲突。

2 个答案:

答案 0 :(得分:1)

哈希表不仅用于字符串。插入和查找的O(1)复杂度通常适用于哈希表,并且仅计算已知操作。

散列和比较算作O(1),因为某些事情必须始终为它们完成,即使您只是存储整数,但我们也不知道那是什么。 / p>

如果对某些数据类型(例如字符串)使用哈希表会使这些操作的成本成倍增加,那么复杂性就会成倍增加。

在衡量使用哈希表的具体算法的复杂性时,考虑这一点实际上非常重要。例如,基于输入字符串的长度受某个常数限制的假设,此站点上的许多基于字符串的算法都具有复杂性。幸运的是,通常是这种情况。

答案 1 :(得分:0)

这个问题与我问的一个问题非常相似:Is a lookup in a hash table O(1)?

公认的答案是,对于哈希表,“时间”是在比较而非操作中衡量的。这是完整的答案,引用如下:

  

您的推理有问题的地方是使用冲突   时间的定义。

     

当有人说在哈希表中查找需要O(1)时间时,通常   表示需要进行O(1)比较,即   查找项目所需的比较在上面以常量为界。   在“时间”的概念下,实际时间(例如   秒(以秒为单位)来计算哈希不会造成变化。

     

比较中的测量时间是一个近似值,尽管它可能   不能像在几秒钟内测量现实一样反映现实   仍会提供有关该行为的有用信息   哈希表。

     

对于大多数渐近复杂性描述,这种情况都是正确的   的算法:人们经常使用具有非常抽象含义的“时间”   那不是“时间”的非正式含义,但通常不是   “操作次数”的某些变化(随操作类型而异)   通常不加说明,期望是显而易见的或从上下文中清楚可见。