大哦分析

时间:2017-04-19 00:30:43

标签: python-3.x big-o

代码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

1 个答案:

答案 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))