Нотация Big-theta представляет следующее правило:
Для любых двух функций f(n)
, g(n)
, если f(n)/g(n)
и g(n)/f(n)
ограничены, так как n
увеличивается добесконечность, тогда f = Θ(g)
и g = Θ(f)
.В этом случае g
является одновременно верхней и нижней границей роста f
.
Вот пример алгоритма:
def find-minimum(List)
min = +∞
foreach value in List
min = value if min > value
return min
Мы хотим оценить функцию стоимости c(n)
, где n
- размер списка ввода.Этот алгоритм выполнит одно сравнение для каждого элемента в списке, поэтому c(n) = n
.
c(n)/n = 1
, который остается ограниченным, когда n
уходит в бесконечность, поэтому c(n)
растет не быстрее, чем n
.Это то, что подразумевается под обозначением big-O c(n) = O(n)
.И наоборот, n/C(n) = 1
также остается ограниченным, поэтому c(n)
растет не медленнее, чем n
.Поскольку он растет ни медленнее, ни быстрее, он должен расти с той же скоростью.Это то, что подразумевается под тета-нотацией c(n) = Θ(n)
.
Обратите внимание, что c(n)/n²
также ограничено, поэтому c(n) = O(n²)
- нотация big-O - это просто верхняя граница сложности, поэтому любая O(n)
функция также O(n²)
, O(n³)
...
Однако, поскольку n²/c(n) = n
не ограничен, то c(n) ≠ Θ(n²)
.Это интересное свойство бета-тета-нотации: это верхняя граница и нижняя граница сложности.