我只需要一个人为我解释一行代码,我不太了解。 *这只是伪代码
m: = 1, l := 0, s:= 0:
while m <= n do
for j = n-m to n do :
l:= l + 1
od
for j = 1 to [log n] do
s: = s +1
od
m := 3m
od
我知道第二个for循环是log n次,而while循环是对数3 n次日志,但是我对第一个for循环感到困惑?有人可以解释,这就是o(n)吗? j = n-m到底是做什么的?
答案 0 :(得分:1)
第一个for
循环从n-m
到n
。因此它具有m
个迭代。在while循环的最后一次迭代中,m
基本是n
,因此它在n
中线性运行。但是总体复杂度比O(n log n)
总共有这么多迭代
(1 + log n) + (3 + log n) + (9 + log n) + ... + (n + log n) ( log_3 n terms )
= log_3 n * log n + (1 + 3 + 9 + ... + n) ( n can be written as 3^(log_3 n) )
= log_3 n * log n + (3^0 + 3^1 + 3^2 + ... + 3^(log_3 n)) (see this as a base 3 number. 11 is smaller than 100)
<= log_3 n * log n + 3^(1 + log_3 n)
= log_3 n * log n + 3 * n
所以主导项是n
,因此总体复杂度是O(n)
。