logo
Символ "О" - асимптотический анализ

§1. Основные определения, примеры

Определение 1:

f(n) = O(g(n)) для всех n N (1.1.1)

означает, что существует такая константа С, что

для всех n N; (1.1.2)

а если обозначение O(g(n)) использовано внутри формулы, то оно обозначает функцию f(n), удовлетворяющую (1.1.2). Значения функции f(n) неизвестны, но мы знаем, что они не слишком велики.

Символ «О» включает неопределенную константу С, каждое вхождение О может подразумевать различные С, но каждая из этих констант не зависит от n.

Пример 1: мы знаем, что сумма квадратов первых n натуральных чисел равна

n = .

Можно записать n = О(n3),

так как для всех целых n. Можно получить более точную формулу

n = О(n2), так как

для всех целых n. Можно также небрежно отбросить часть информации и записать n = О(n10).

Определение О не заставляет нас давать наилучшую оценку.

Рассмотрим пример, когда переменная n - не целочисленная.

Пример 2: , где х - вещественное число.

Здесь уже нельзя сказать, что S(x) = O(x3), так как отношение неограниченно растет при х0. Нельзя также сказать, что S(x) = O(x), т.к. отношение неограниченно растет, когда х стремится к бесконечности. Значит, мы не можем использовать символ «О» для оценки S(x).

Эта дилемма разрешается благодаря тому, что на переменные, используемые с О, обычно накладываются какие-либо ограничения. Если, например, мы поставим условие, что , или что , где - произвольная положительная константа, или что х - целое число, то мы сможем записать S(x) = O(x3). Если же наложено условие или , где с - произвольная положительная константа, то в этом случае S(x) = O(x). «О большое» зависит от контекста, от ограничений на используемые переменные.

Эти ограничения часто задаются в виде предельных соотношений.

Определение 2: соотношение f(n) = O(g(n)) при n означает, что существуют две константы С и n0, такие, что

при всех n n0. (1.1.3)

Замечание 1: Значения С и n0 могут быть разными для разных О, но они не зависят от n.

Определение 3: запись f(х) = O(g(х)) при х0 означает, что существуют две константы С и , такие, что

, если только . (1.1.4)

Теперь О представляет неопределенную функцию и одну или две неопределенные константы, зависящие от контекста.

Замечание 2: запись корректна, но в этом равенстве нельзя менять местами правую и левую части. В противном случае мы можем прийти к нелепым выводам, наподобие n = n2, исходя из верных тождеств n = О(n2) и n2 = О(n2).

Работая с символом «О» мы имеем дело с односторонними равенствами. Правая часть уравнения содержит не больше информации, чем левая, и фактически может содержать меньше информации; правая часть является «огрублением» левой.

Если говорить строго формально, то запись O(g(n)) обозначает не какую-то одну функцию f(n), а сразу множество функций f(n), таких, что для некоторой константы С. Обычная формула g(n), не включающая символ О, обозначает множество, содержащее одну функцию f(n) = g(n). Если S и T суть множества функций от n, то запись S + T обозначает множество всех функций вида f(n) + g(n), где f(n)S и g(n)T; другие обозначения вроде S - T, ST, S/T, , еS, ln S определяются аналогично. Тогда «равенство» между двумя такими множествами функций есть теоретико-множественное включение; знак «=» в действительности означает «».

Пример 3: «Уравнение» означает, что S1  S2, где S1 есть множество всех функций вида , для которых найдется константа С1, такая, что , а S2 есть множество всех функций , для которых найдется константа С2, такая, что .

Можно строго доказать это «равенство», если взять произвольный элемент из левой части и показать, что он принадлежит правой части: пусть таково, что , следует доказать, что существует такая константа С2, что . Константа решает проблему, так как для всех целых n.

Замечание 3: Если в формуле используется несколько переменных, то символ О представляет множество функций от двух или более переменных, а не только от одной. В область определения каждой функции входят все переменные, которые в данном контексте «свободны» для изменения.

Тут есть некоторая тонкость ввиду того, что переменные могут иметь смысл лишь в части выражения, если они связаны знаком или подобным.

Пример 4: , целое n  0. (1.1.5)

Выражение k2 + O(k) в левой части отвечает множеству всех функций от двух переменных вида k2 + f(k, n), для которых найдется константа С, такая, что для 0  k  n. Сумма таких множеств функций для 0  k  n есть множество всех функций g(n) вида

,

где f удовлетворяет сформулированному условию. Поскольку

то все такие функции g(n) принадлежат правой части (1.1.5); следовательно, (1.1.5) справедливо.