in
Python中运算符的复杂性是什么?是theta(n)吗?
与以下相同吗?
def find(L, x):
for e in L:
if e == x:
return True
return False
L
是一个列表。
in
Python中运算符的复杂性是什么?是theta(n)吗?
与以下相同吗?
def find(L, x):
for e in L:
if e == x:
return True
return False
L
是一个列表。
L
并不表示列表。seq
是要隐含列表的最常见选择。L
是一个糟糕的变量名。单字母字母不好,大写字母表示这是一类。即使是特别的东西,Python还是动态的,所以在这种情况下要明确声明它。
L
是list
什么意思?我的libtelepathy.so可能已过时。
list
Answers:
的复杂性in
完全取决于是什么L
。e in L
将成为L.__contains__(e)
。
有关几种内置类型的复杂性,请参见此时间复杂性文档。
这是以下内容的摘要in
:
集合和字典的O(n)最坏情况很少见,但如果__hash__
实施不当,则可能发生。仅当您集合中的所有内容都具有相同的哈希值时,才会发生这种情况。
这完全取决于容器的类型。散列容器(dict
,set
)使用散列并且基本上O(1)。您猜中会实现典型的序列(list
,tuple
),它们是O(n)。树木的平均值为O(log n)。等等。这些类型中的每一个都将具有__contains__
其big-O特性的适当方法。
dict
和set
(以及潜在的其他数据)
这取决于您要测试的容器。通常是您所期望的-有序数据结构是线性的,无序数据结构是恒定的。当然,这两种类型(有序或无序)都可能由树的某些变体支持。
A in B
测试是否A
在中B
。