[英]What's the big O of this little code snippet?
for i := 1 to n do
j := 2;
while j < i do
j := j^4;
当谈到Big-O表示法时我真的很困惑,所以我想知道它是否是O(n log n)。 这是我的直觉,但我无法证明这一点。 我知道while循环可能比log n快,但我不知道多少!
编辑:插入符表示指数。
问题是为给定的i
执行while循环的迭代次数。
在每次迭代j:= j^4
并且在开头j := 2
,所以在x
次迭代之后j = 2
4^x
j < i
相当于x < log_4(log_2(i))
我冒险声明复杂性为O(n * log_4(log_2(n)))
你可以摆脱Big O符号中的常数因素。 log_4(x) = log(x) / log(4)
和log(4)
是常量。 同样,您可以将log_2(x)
更改为log(x)
。 复杂度可以表示为O(n*log(log(n)))
) where slog represents the inverse of the tetration operator . 关闭袖口,我猜是它是O( n slog 4 ),其中slog代表tetration运算符的反转。 取幂是取幂后的下一个操作。 就像乘法是迭代加法一样,取幂是迭代乘法,tetration是迭代求幂。
by 4 each iteration then the function would be O( log 4 ). 我的理由是,如果每次迭代将乘以4,则函数将为O( log 4 )。 但是因为你在每次迭代中对它进行取幂,所以你需要一个比log: slog更强大的运算符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.