Python中 运算符的复杂性是多少?是θ(n)?
是否与以下相同?
def find(L, x)
for e in L:
if e == x:
return True
return False
L是一个清单。
答案 0 :(得分:83)
in
的复杂性完全取决于L
。 e in L
将成为L.__contains__(e)
。
有关几种内置类型的复杂性,请参阅此time complexity document。
以下是in
的摘要:
集合和词典的O(n)最坏情况非常罕见,但如果__hash__
执行不当,可能会发生这种情况。只有当集合中的所有内容都具有相同的哈希值时,才会发生这种情况。
答案 1 :(得分:9)
完全取决于容器的类型。散列容器(dict
,set
)使用散列,基本上是O(1)。典型的序列(list
,tuple
)在您猜测时实现,并且是O(n)。树将是平均O(log n)。等等。这些类型中的每一种都具有适当的__contains__
方法及其大O特征。
答案 2 :(得分:0)
这取决于您正在测试的容器。它通常是您所期望的 - 有序数据结构的线性,无序的常量。当然,有两种类型(有序或无序)可能由树的某个变体支持。