你如何解决这个问题的时间复杂性?
int count=0;
for (int i=1 ; i < n; i*=4)
for (int j=1;j<=n;j++)
count++;
答案 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)