Я изучаю алгоритм анализа. У меня возникли проблемы с пониманием разницы между O, Ω и Θ.
Способ, которым они определены, выглядит следующим образом:
f(n) = O(g(n))
означает, чтоc · g(n)
является верхняя граница наf(n)
. Таким образом, существует некоторая постояннаяc
такая, чтоf(n)
всегда ≤c · g(n)
, для достаточно большихn
(т.е.n ≥ n0
для некоторой константыn0
).f(n) = Ω(g(n))
означает, чтоc · g(n)
является нижняя граница наf(n)
. Таким образом, существует некоторая постояннаяc
такая, чтоf(n)
всегда ≥c · g(n)
, для всехn ≥ n0
.f(n) = Θ(g(n))
означает, чтоc1 · g(n)
является верхней границей наf(n)
, аc2 · g(n)
является нижняя граница наf(n)
, для всехn ≥ n0
. Таким образом, существуют константыc1
иc2
такой, чтоf(n) ≤ c1 ·g(n)
иf(n) ≥ c2 ·g(n)
. Это означает, чтоg(n)
обеспечивает хорошую, жесткую привязку кf(n)
.
Как я понял это:
-
O(f(n))
дает худшую сложность заданной функции/алгоритма. -
Ω(f(n))
дает наилучшую степень сложности заданной функции/алгоритма. -
Θ(f(n))
дает среднюю сложность случая заданной функции/алгоритма.
Пожалуйста, поправьте меня, если я ошибаюсь. Если это так, временная сложность каждого алгоритма должна быть выражена во всех трех обозначениях. Но я заметил, что он выражается либо O, Ω, либо Θ; почему не все три?