Первый цикл 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)
.