【发布时间】:2017-03-25 13:12:50
【问题描述】:
我正在尝试计算为以下嵌套循环执行的步骤数,专门用于渐近增长。根据步数,我将推导出该算法的大 O。
def get_multiples(list):
multiple = []
for o in list:
for i in list:
multiple.append(o*i)
return multiple
我计算的方式如下(列表包含大量元素=“n”):
-
作业说明(步骤数 = 1):
multiple = [] -
嵌套循环:
for o in list: for i in list: multiple.append(o*i)在外循环中,变量 o 被赋值 n 次。每次执行外循环时,首先将变量 i 分配 n 次,然后将变量乘以 n 次,最后将列表附加 n 次。因此没有。步数 = n*(n+n+n) = 3n2
-
返回语句(步数 = 1):
return multiple
因此总数。步数 = 3n2 + 2
但正确答案是 3n2 + n +2。显然,外部循环的执行需要额外的 n 步骤,而内部循环不需要。
有人可以向我解释我错过了什么吗?
它对复杂性没有影响,因为它仍然是 O(n2)
【问题讨论】:
-
你自己写的:“在外循环中,变量o被赋值了n次”。
-
@n.m 答案应该是这样的:1 + n*(3*n +1)。每次循环执行时都会发生外部循环变量赋值,因此它是结果中的乘数 n。我的问题是为什么每次外部循环执行时我们仍然需要考虑额外的 1 步,即 "n*(...+1) 部分。
标签: algorithm time-complexity big-o