Нет, вы правы, что здесь происходит умножение, но оно служит для уменьшения добавленного времени выполнения, а не для увеличения этого.
Вы должны посмотреть, как быстро заканчивается цикл, основываясь на входном значении n
. За n = 128
вы получите i = 1, 2, 4, 8, 16, 32, 64, 128
. Если вы удвоите n
, это не удвоит время, как это было бы для O (n), и, конечно, не умножит его на 4, как это было бы для O (n 2 ). Он просто добавляет еще одну итерацию в цикл.
Это то, что известно как временная сложность O (log N). Время выполнения увеличивается с логарифмом входного значения, и это обычно наблюдается в вещах типа сбалансированного двоичного дерева, где вы можете удалить половину оставшегося пространства поиска с каждой итерацией.