【发布时间】:2022-01-05 10:03:05
【问题描述】:
我希望遍历列表中的每三个元素。但是在考虑 Big-O 表示法时,Big-O 的复杂度是 O(n),其中 n 是列表中元素的数量,还是每三个元素的复杂度为 O(n/3)?
换句话说,即使我指定列表应该只迭代每三个元素,Python 是否仍然循环遍历整个列表?
示例代码:
def function(lst):
#iterating over every third list
for i in lst[2::3]:
pass
【问题讨论】:
-
这将是 O(n/3)。 Big-O 表示法与物理实现是分开的,因此 python 如何实现它并不重要,只要它。话虽如此,python 只查看每三个元素,而完全忽略其余元素。
-
更好的问题:
O(n)和O(n/3)之间有区别吗? -
可能更容易将其视为仅访问列表长度内的每三个索引,而不是在包含这些元素的数据结构的上下文中。
-
@Locke 为什么?不涉及任何索引,并且您的建议不会改变迭代的“事物”的数量,无论您如何称呼它们。
-
是否创建新列表无关紧要。这是 O(n);在两个极端情况下,
n/3和2n之间存在差异,它仍然只是 6 的常数因子:无论哪种方式都是 O(n)。