【发布时间】:2021-03-24 13:14:41
【问题描述】:
这个循环的时间复杂度是多少?
for(int i = 0; i < n*n; i *= 2)
{ //Something with O(1) complexity here }
我猜是 O(log n*n)。
【问题讨论】:
-
是的,你的猜测是正确的
标签: time-complexity computer-science
这个循环的时间复杂度是多少?
for(int i = 0; i < n*n; i *= 2)
{ //Something with O(1) complexity here }
我猜是 O(log n*n)。
【问题讨论】:
标签: time-complexity computer-science
你是对的,因为 i 在每次迭代中加倍,并且循环在 i >= n2 时终止,使其运行为 O(log n2) 次迭代。
但是,请注意 O(log n2) = O(2 log n) = O(log n)。
编辑:然而,正如 Zilog80 指出的那样,这段代码将i 初始化为 0,这将导致循环无限运行,因为 0 * 2 = 0时间>。但是,如果您将其初始化为某个正数(常数),那么您的计算是正确的。
【讨论】:
i计数器的初始化为0,实际上是一个无限循环。似乎不存在适当的符号,但它会是 O(∞) 或 O(0) [意思是无法解决的,我猜 O (∞) 更好] ^^ 除非i 在 O(1) 过程中以某些方式被更改,但 OP 并没有明确这一点。