时间复杂度(嵌套循环)
Time complexity(nested loops)
这个的时间复杂度怎么算的?
int count=0;
for (int i=1 ; i < n; i*=4)
for (int j=1;j<=n;j++)
count++;
tl;dr:发布代码的复杂度为:O(nlogn)
让我们从里到外分析一下。对于 i
.
的每个值,内部循环恰好重复自身 n
次
外循环在 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)
这个的时间复杂度怎么算的?
int count=0;
for (int i=1 ; i < n; i*=4)
for (int j=1;j<=n;j++)
count++;
tl;dr:发布代码的复杂度为:O(nlogn)
让我们从里到外分析一下。对于 i
.
n
次
外循环在 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)