Big-O嵌套while循环

时间:2014-07-09 00:03:18

标签: big-o complexity-theory time-complexity

i <-- 1
while(i < n)
   j <--1
   while(j < i)
      j <-- j * 2
   i <-- i + 1
done

对于内循环,我的镜头为O(log n)。我猜测外环是O(n),总体复杂度为O(n log n)。确认?

2 个答案:

答案 0 :(得分:8)

您可以正式,一步一步地使用Sigma表示法获得确切的迭代次数 - 查看Discrete Loops and Worst Case Performance论文(第10页)。

enter image description here

结果经验证实。

答案 1 :(得分:1)

是的,你是对的,但要弄清楚它并不是那么简单:)。

内环很简单log n,无需进一步解释。

然而外循环并不那么简单,因为在每个循环中它都会改变内循环的执行时间。

如果您考虑一下,内部循环将会运行(随着i增加):

log 1 + log 2 + log 3 + log 4 + log 5 .... + log n

由于logharitms的一些定律,它与log (1*2*3*4*....*n)相同,与

相同

log (n!)

法律n!具有相同的复杂性(谨防,它是复杂性,在代数中不同)n^n

因此log (n!) = O(log (n^n))

现在我们可以切换回代数,因为log (n^k) = k*log (n)我们得到了结果

log (n^n) = n log n

结果:

时间复杂度为O(n log n)