Разрежьте его на части:
int sum = 0
Здесь у вас есть O (1).
for (int i = 2N; i > 0; i = i / 4)
Сколько раз это будет выполняться? Допустим, он будет работать k раз и оценит k:
2N / 4 ^ k = 1 => 2N = 4 ^ k => k = log4 (2N). Чтобы упростить, давайте просто назовем k = lg (N).
for (int j = 0; j < i; j+=2)
sum++
end for
В первом случае это for идет до N, затем N / 4, затем N / 16, et c.
Это дает вам следующее:
∑ (N / 4 ^ i), i = 0 ... k =
N * ∑ 1/4 ^ i, i = 0 ... k
∑ 1/4 ^ i, i = 0 ... k - ряд, который меньше 4/3 , так как он останавливается в k = lg ( n) потому что внешний l oop просто запускается lg (n) раз.
Следовательно, сложность O (X <4/3 * N), следовательно, линейная. </p>