Я знаю, что обход связанного списка от головы до хвоста занимает O (n) времени. Что, если мы пройдем его дважды? Это все еще O (n), правильно? Потому что я в основном O (n + n) = O (2n) ~ O (n).

0
Cesare 17 Окт 2019 в 15:01

1 ответ

Лучший ответ

Да. В самом деле, вы можете сказать, что если f(n) находится в O(n), f(2n) тоже находится в `O (n). Это происходит из определения символа.

По определению существует такая константа c > 0 и N0, что f(n) < c * n для всех n > N0. Следовательно, f(2n) < c' * n для n >‌ N0 / 2 и константы c'. Следовательно, f(2n) тоже находится в O(n).

Обратите внимание, что утверждение «если f(n) находится в O(g(n)), то и f(2n) входит в O(g(n))}» совершенно неверно! Пример противоречия - когда f(n) = g(n) = 2^n.

2
OmG 17 Окт 2019 в 12:45