嵌套循环中的步骤数
Number of steps in a nested loop
我正在尝试计算为以下专门用于渐近增长的嵌套循环执行的步骤数。根据步数,我将推导出该算法的大 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)
</pre>
在外层循环中,变量o被赋值了n次。每次执行外层循环时,首先为变量 i 赋值 n 次,然后将变量相乘 n 次,最后将列表追加 n 次。因此没有。步骤数 = n*(n+n+n) = 3n2
Return 语句(步骤数 = 1):
return multiple</pre>
所以总数没有。步骤数 = 3n2 + 2
然而正确答案是3n2 + n +2。显然,外循环的执行需要额外的 n 步,而内循环不需要这些步骤。
有人可以向我解释我错过了什么吗?
它对复杂性没有影响,因为它仍然是 O(n2)
我认为计算嵌套循环的正确方法如下:
号码o
被分配了n次。
数字i
被赋值n2次,o*i被计算n2次,append函数被调用n2次。
因此 n + n2 + n2 + n2 = 3n2 + n
将它添加到其余部分,你得到 3n2 + n + 2
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 + n2 + 2n2 + 1 = 3n2 + n + 2
我正在尝试计算为以下专门用于渐近增长的嵌套循环执行的步骤数。根据步数,我将推导出该算法的大 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) </pre>
在外层循环中,变量o被赋值了n次。每次执行外层循环时,首先为变量 i 赋值 n 次,然后将变量相乘 n 次,最后将列表追加 n 次。因此没有。步骤数 = n*(n+n+n) = 3n2
Return 语句(步骤数 = 1):
return multiple</pre>
所以总数没有。步骤数 = 3n2 + 2
然而正确答案是3n2 + n +2。显然,外循环的执行需要额外的 n 步,而内循环不需要这些步骤。
有人可以向我解释我错过了什么吗?
它对复杂性没有影响,因为它仍然是 O(n2)
我认为计算嵌套循环的正确方法如下:
号码o
被分配了n次。
数字i
被赋值n2次,o*i被计算n2次,append函数被调用n2次。
因此 n + n2 + n2 + n2 = 3n2 + n
将它添加到其余部分,你得到 3n2 + n + 2
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 + n2 + 2n2 + 1 = 3n2 + n + 2