Обычно Биг-О и Биг-Тета нотации запутываются.
Попытка непрофессионала в определении может состоять в том, что Биг-О означает, что одна функция растет так быстро илибыстрее , чем другой, т. е. при достаточно большом n, f(n)<=k*g(n)
, где k - некоторая константа.Это означает, что если f (x) = 2x ^ 3, то оно находится в O (x ^ 3), O (x ^ 4), O (2 ^ x), O (x!) И т. Д.
Big-Theta означает, что одна функция растет так же быстро , как и другая, и ни одна из них не способна «перерасти» другую, или k1*g(n)<=f(n)<=k2*g(n)
для некоторых k1 и k2.В терминах программирования это означает, что эти две функции имеют одинаковый уровень сложности.Если f (x) = 2x ^ 3, то это в Θ (x ^ 3), как, например, если k1 = 1 и k2 = 3, 1*x^3 < 2*x^3 < 3*x^3
По моему опыту, когда программистыГоворя о Big-O, на самом деле речь идет о Big-Θ, поскольку нас больше волнует со скоростью часть больше, чем не быстрее часть.
Тем не менее, если две функции с разными Θ объединяются, как в вашем примере, более крупная - (Θ (2 ^ n) - глотает меньшую - Θ (n), поэтому оба f
и g
имеют одинаковую сложность Big-O и Big-.. В этом случае правильно, что
f(n) = O(g(n)), also f(n) = Θ(g(n))
g(n) = O(f(n)), also g(n) = Θ(f(n))
, так как они имеют одинаковую сложность, они O и Θ связаны друг с другом.