Не каждая пара функций сравнима с обозначениями ; рассмотрим функции f ( n ) = n и
g ( n ) = { 1, если n нечетно , n 2, если n четно .
Более того, такие функции, как g ( n ) , действительно возникают как время выполнения алгоритмов. Рассмотрим очевидный алгоритм перебора, чтобы определить, является ли данное целое число n простым:O ( ⋅ )е( n ) = n
грамм( n ) = { 1 N2если n нечетно ,если п четное .
грамм( н )N
IsPrime(n):
for i ← 2 to (n-1)
if i·⌊n/i⌋ = n
return False
return True
Этот алгоритм требует арифметических операций, когда n чётно, O ( √Θ ( 1 )Nоперации, когдаnсоставно, ноΘ(n)операции, когдаnпростое число. Таким образом, формально этот алгоритмнесопоставимс алгоритмом, использующим √O ( n--√)NΘ ( н )N арифметических операций длякаждогоn.N--√ N
В большинстве случаев, когда мы анализируем алгоритмы, нам нужна только асимптотическая верхняя граница вида для некоторой относительно простой функции f . Например, большинство учебников просто (и правильно) сообщает , что бежит в O ( N ) арифметические операции. Типичные функции верхней границы - это произведения экспонент, полиномов и логарифмов (хотя иногда встречаются и более экзотические звери, такие как факториалы и повторные логарифмы ). Нетрудно доказать, что любые две такие функции сравнимы.O ( f( н ) )еIsPrime(n)
O ( n )
Смотрите также этот вопрос MathOverflow .