繁体   English   中英

这个小代码片段的大O是什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM