Python中* in *运算符的复杂性

时间:2012-12-14 18:17:23

标签: python time-complexity

Python中 运算符的复杂性是多少?是θ(n)?

是否与以下相同?

def find(L, x)
   for e in L:
       if e == x:
           return True
   return False

L是一个清单。

3 个答案:

答案 0 :(得分:83)

in的复杂性完全取决于Le in L将成为L.__contains__(e)

有关几种内置类型的复杂性,请参阅此time complexity document

以下是in的摘要:

  • list - 平均值:O(n)
  • set / dict - 平均值:O(1),最差:O(n)

集合和词典的O(n)最坏情况非常罕见,但如果__hash__执行不当,可能会发生这种情况。只有当集合中的所有内容都具有相同的哈希值时,才会发生这种情况。

答案 1 :(得分:9)

完全取决于容器的类型。散列容器(dictset)使用散列,基本上是O(1)。典型的序列(listtuple)在您猜测时实现,并且是O(n)。树将是平均O(log n)。等等。这些类型中的每一种都具有适当的__contains__方法及其大O特征。

答案 2 :(得分:0)

这取决于您正在测试的容器。它通常是您所期望的 - 有序数据结构的线性,无序的常量。当然,有两种类型(有序或无序)可能由树的某个变体支持。