我正在尝试计算以下嵌套循环执行的步骤数,专门用于渐近增长。根据步骤数量,我将得出此算法的Big 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) = 3n 2
退货声明(步数= 1 ):
return multiple
因此总数没有。步骤= 3n 2 + 2
然而,正确的答案是 3n 2 + n +2 。显然,外循环的执行需要额外的 n 步骤,而内循环不需要这些步骤。
有人可以向我解释我错过了什么吗?
它对复杂性没有影响,因为它仍然是 O(n 2 )
答案 0 :(得分:1)
我认为计算嵌套循环的正确方法如下:
号码o
被分配n次。
数字i
分配n 2 次,o * i计算n 2 次,追加函数称为n 2 次。
因此n + n 2 + n 2 + n 2 = 3n 2 + n
将其添加到其余部分并获得3n 2 + n + 2
答案 1 :(得分:0)
def get_multiples(list):
multiple = [] // 1 STEP
for o in list: // Executed n times, so n STEPS
for i in list: // Executed n times for each value of o, so n*n STEPS
multiple.append(o*i) // 1 STEP to multiply and 1 STEP to append, repeated for each pair of (o, i), so 2*n*n STEPS
return multiple // 1 STEP
添加以上内容: 1 + n + n 2 + 2n 2 + 1 = 3n 2 + n + 2 < /强>