【问题标题】:What is the time complexity of checking membership in tuples?检查元组成员的时间复杂度是多少?
【发布时间】:2020-03-06 17:15:45
【问题描述】:

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

  • dict - 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)

我得到这样的东西:

Time spent in set is:  2.0000000000575113e-06
Time spent in list is:  0.07841469999999995
Time spent in tuple is:  0.07896940000000008

这告诉我它也是 O(n)。 谁能证实这一点?是否有官方文件证实这一点?

【问题讨论】:

    标签: python python-3.x tuples time-complexity membership


    【解决方案1】:

    将元组视为只是一个“冻结列表”。一个元组,就像一个列表,必须逐个条目地搜索,以找出一个对象是否是该元组的成员。

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

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

    【讨论】:

      猜你喜欢
      • 2020-10-16
      • 2023-03-13
      • 2021-01-22
      • 2015-01-19
      • 1970-01-01
      • 2021-02-10
      • 2018-11-24
      • 2014-05-27
      • 1970-01-01
      相关资源
      最近更新 更多