Во-первых, O(2log(n))
не равно O(n)
.
Чтобы использовать большие обозначения O, вы найдете функцию, которая представляет сложность вашего алгоритма, а затем вы найдете термин в этой функции с наибольшей скоростью роста.Наконец, вы бы исключили любые постоянные факторы, которые могли бы.
, например, скажем, ваш алгоритм повторяется 4n^2 + 5n + 1
раз, где n - размер ввода.Сначала вы возьмете термин с наивысшей скоростью роста, в данном случае 4n^2
, затем удалите все постоянные факторы, оставив сложность O(n^2)
.
В вашем примере O(2log(n))
можно упростить до O(log(n))
Теперь к вашему вопросу.
В информатике, если не указано иное, обычно можно предположить, что log(n)
фактически означает логарифм n, основание 2.
Это означает, что, используя законы логарифма, 2^log(n)
может бытьупрощено до O(n)
Доказательство:
y = 2^log(n)
log(y) = log(2^log(n))
log(y) = log(n) * log(2) [Log(2) = 1 since we are talking about base 2 here]
log(y) = log(n)
y = n