Два цикла for
не зависят друг от друга, поэтому общая сложность должна быть примерно равна сложности двух циклов. Каждый цикл равен O(lgN)
, где lg
означает «логарифмическая база 2». Таким образом, умножение этого вместе дает O(lgN*lgN)
для общей сложности.
Чтобы лучше понять, откуда O(lgN)
, рассмотрим входное значение n=16
. Внешний цикл for
в i
будет иметь следующие итерации:
i | iteration #
16 | 1
8 | 2
4 | 3
2 | 4
lg(16)
на самом деле равно 4, потому что 2^4 = 16
, так что это подтверждает сложность, которую мы ожидаем. Вы также можете проверить другие значения n
, чтобы убедиться в этом. Внутренний цикл в j
ведет себя таким же образом и не зависит от внешнего цикла в i
.