时间复杂度(嵌套循环)

时间:2016-08-22 16:41:51

标签: algorithm time-complexity big-o

你如何解决这个问题的时间复杂性?

int count=0;

for (int i=1 ; i < n; i*=4)

     for (int j=1;j<=n;j++)

              count++;

1 个答案:

答案 0 :(得分:6)

tl; dr:发布代码的复杂性为:O(nlogn)

让我们从内到外分析它。对于n的每个值,内循环自身重复i次。

外循环在i < n时重复,i每次乘以4。这意味着,在第一次迭代后,i=1,然后i=4, i=16, i=64, ....k'th次迭代i = 4^(k-1)之后。
这意味着你在以下时间停止:

i >= n
4^(k-1) >= n
log_4(4^(k-1)) >= log_4(n)
k-1 >= log_4(n).

这意味着外部循环将重复log_4(n) + 1

将它们汇总在一起会给你n*(log_4(n)+1)次内循环重复,这是O(nlogn)