检查元组成员的时间复杂度是多少?

ywb*_*aek 4 python membership tuples time-complexity python-3.x

x in data_structure在字典、列表和集合中检查成员资格 ( ) 的时间复杂度在此处列出:http : //wiki.python.org/moin/TimeComplexity

  • 字典 - O(1)
  • 列表 - O(n)
  • 设置 - O(1)

但是,我在任何 Python 文档中都找不到元组的那个。我尝试了以下代码来检查自己:

import time 

l = list(range(10000000))
t = tuple(range(10000000))
s = set(range(10000000))

start = time.perf_counter()  
-1 in s
elapsed = time.perf_counter() 
e = elapsed - start 
print("Time spent in set is: ", e)

start = time.perf_counter()  
-1 in l
elapsed = time.perf_counter() 
e = elapsed - start 
print("Time spent in list is: ", e)


start = time.perf_counter()  
-1 in t
elapsed = time.perf_counter() 
e = elapsed - start 
print("Time spent in tuple is: ", e)
Run Code Online (Sandbox Code Playgroud)

我得到这样的东西:

Time spent in set is:  2.0000000000575113e-06
Time spent in list is:  0.07841469999999995
Time spent in tuple is:  0.07896940000000008
Run Code Online (Sandbox Code Playgroud)

这告诉我它也是 O(n)。任何人都可以证实这一点吗?是否有官方文件证实这一点?

gel*_*ida 5

考虑一个元组只是一个“冻结列表”。一个元组,就像一个列表,必须通过一个条目一个条目地进行搜索,以便找到一个对象是否是那个元组的成员。

成员资格测试的复杂度与列表的复杂度相同:O(n)。

dicts 和 set 是 O(1) 的原因是条目是通过散列算法访问的。