Loops 用乘法增量从循环中提取上界
我知道如何使用求和从使用求和的线性for循环中提取时间复杂度(和大O),但是如何将它用于乘法增量循环以获得O(logn)。例如,下面的代码是O(nlogn),但我不知道为什么Loops 用乘法增量从循环中提取上界,loops,for-loop,big-o,Loops,For Loop,Big O,我知道如何使用求和从使用求和的线性for循环中提取时间复杂度(和大O),但是如何将它用于乘法增量循环以获得O(logn)。例如,下面的代码是O(nlogn),但我不知道为什么 for (i = 0; i < n; i++) for (j = 1; j < n; j*7) /*some O(1) operations*/ (i=0;i
for (i = 0; i < n; i++)
for (j = 1; j < n; j*7)
/*some O(1) operations*/
(i=0;i
对于(j=1;j
还有,为什么while循环O(logn)和do while循环O(n^2)。在执行j=j*7
的每个内部循环迭代时(我假设这就是您的意思)
也就是说,在每次迭代j=7j
在n
迭代之后,j=j*7*7*7*…*7*7=j*(7^n)
让n
成为我们想要达到的数字,m
为迭代次数,因此:
n = j*7*7*7*...7 = j*(7 ^ m)
让我们从两边各拿一根圆木:
log(n) = log(j * (7 ^ m)) ~= m*log(7) = O(m)
因此,正如我们所看到的,内部循环运行O(log(n))
次