大哦分析
Big oh Analysis
代码 1:
我认为这段代码是 O(n^3),因为外循环运行 n^2 次而内循环运行 n 次。根据我的教授,这段代码不是 O(n^3)。有人可以解释为什么吗?我真的很困惑。
i, j, sum = 1, 1, 0
while i < n**3:
while j < n:
sum = sum + i
j += 1
i = i + n
代码 2:
我认为这段代码是 O(n)。有人可以确认一下吗?
i, j, sum = 0, 0, 0
while i ** 2 < n:
while j ** 2 < n:
sum += i*j
j += 2
i += 4
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))
.
代码 1:
我认为这段代码是 O(n^3),因为外循环运行 n^2 次而内循环运行 n 次。根据我的教授,这段代码不是 O(n^3)。有人可以解释为什么吗?我真的很困惑。
i, j, sum = 1, 1, 0
while i < n**3:
while j < n:
sum = sum + i
j += 1
i = i + n
代码 2:
我认为这段代码是 O(n)。有人可以确认一下吗?
i, j, sum = 0, 0, 0
while i ** 2 < n:
while j ** 2 < n:
sum += i*j
j += 2
i += 4
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))
.