代码1:
我认为这段代码是O(n ^ 3),因为外循环运行n ^ 2次,内循环运行n次。根据我的教授,这段代码不是O(n ^ 3)。有人可以解释一下原因吗?我真的很困惑。
free
代码2:
我认为这段代码是O(n)。有人可以确认吗?
i, j, sum = 1, 1, 0
while i < n**3:
while j < n:
sum = sum + i
j += 1
i = i + n
答案 0 :(得分:0)
i, j, sum = 1, 1, 0
while i < n**3:
while j < n:
sum = sum + i
j += 1
i = i + n
请注意,内循环仅在外循环的第一次传递期间执行,因为j
未在for
循环中重新初始化。很明显,内循环的运行时间恰好是n
。另一方面,外循环执行n^2
次。为什么?观看i
更改的方式:首先是1
,然后是n+1
,然后是2n+1
,...,最后是n^2*n+1
,所以i
增加n^2
次。因此,总运行时间为n + n^2
,即O(n^2)
。
i, j, sum = 0, 0, 0
while i ** 2 < n:
while j ** 2 < n:
sum += i*j
j += 2
i += 4
与第一种情况类似的分析,另外注意条件while i ** 2 < n
等同于while i < sqrt(n)
。内循环仅在外循环的第一次传递期间执行,其运行时间为sqrt(n) / 2
,因为j
增加2(而不是1)。外循环运行sqrt(n) / 4
次,因此总运行时间为sqrt(n) / 2 + sqrt(n) / 4
,即O(sqrt(n))
。