【问题标题】:Big O running time of in oprator in pythonpython中in运算符的大O运行时间
【发布时间】:2017-11-06 00:56:11
【问题描述】:

我想知道下面这个简单程序的 Big O 运行时间是多少:

dates = [0,2,3,4]
sample_list = [1,2,3,4]
for i in range(0, 4):
    sub_list = sample_list[i+1:]
    if dates[i] in sub_list:
        count += 1

运行时间是O(n)还是O(n**2)?我知道运行时间至少是 O(n),因为我有一个 for 循环,但是 if dates[i] in sub_list 语句呢?运行时间是多少?

【问题讨论】:

  • O(n)O(n**2) 没有n 的定义就毫无意义... n 是什么? datessample_list 中的元素数量?列表的数量?...

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


【解决方案1】:

您的循环似乎并不取决于列表的长度,尽管它可能应该如此。但是,对sample_list[i+1:] 的调用将取决于sample_listdates[i] in sub_list 的大小。

因此,您的代码为O(n),其中n 的长度为sample_list

【讨论】:

  • 如果我把它改成for i in range(0, len(dates)) 呢?这会给我 O(n) 吗?
  • 正如 Stefan 指出的那样,它已经是 O(n),但最好不要对索引进行硬编码。
  • 我明白了。因此,如果我理解正确,if dates[i] in sub_list 不会将运行时间增加到 O(n^2)。但是我正在阅读这篇文章:stackoverflow.com/questions/13884177/… 并且列表中的“in”运算符似乎具有 O(n) 运行时间。因为我在这个 in 运算符之外包装了一个 for 循环。我的情况不应该是 O(n^2) 吗?
  • 如果您在 for 中使用 len(dates) 而不是 4 -循环。
  • 我明白你说的。有趣的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-31
  • 2012-07-11
  • 1970-01-01
相关资源
最近更新 更多