ВПЕРЁД ⇒
⇐ НАЗАД
Асимптотическое обозначение о-большое
Сначала объясним понятие асимптотического обозначения (о-большое) на простом конкретном примере, а затем дадим формальное определение этому асимптотическому обозначению.
Простое объяснение для о-большое
Для алгоритма поиска минимального элемента в массиве размерностью мы получили следующую зависимость для наихудшего и наилучшего случаев входных данных:
, где - линейный порядок роста сложности вычислений алгоритма. То есть функция ведёт себя линейным образом.
Зная порядок роста сложности вычислений алгоритма, мы можем не указывать точное выражение для сложности вычислений , достаточно просто подчеркнуть тот факт, что нам известно, каким порядком роста обладает искомая зависимость:
, где - асимптотическая оценка для времени работы в наихудшем случае входных данных. Оценка говорит о том, что в некотором множестве существует некоторая неизвестная нам точная оценка для такая, что порядок роста этой точной оценки (то есть порядок роста искомой функции ) в наихудшем случае линеен, то есть равен . Обозначение , применяющееся в математическом анализе для оценки любой произвольной функции, носит название -нотации/обозначения (нотации о-большое; big-oh notation). В случае анализа алгоритмов, данная нотация говорит нам о том, что, с ростом размера входных данных, время работы алгоритма увеличивается не быстрей, чем порядок роста, указанный во входном параметре оценки (в данном примере, не быстрей, чем ). Иными словами, рассматриваемый алгоритм работает (в контексте скорости исполнения) не хуже указанного порядка роста ().
Математическое определение для о-большое
-обозначение (-нотация) используется для определения у некоторой функции её асимптотической верхней границы, представляющей собой некоторую другую функцию такую, что для неё можно найти значение , для которого будет справедливо следующее утверждение: если , то .
Для заданной функции запись (которая произносится как “о-большое от от ”) обозначает множество функций такое, что для всех функций из этого множества можно найти некоторые положительные константы и такие, что для всех и всех из .
Ниже представлено определение для -нотации в математической символьной форме (расшифровка математической записи идёт сразу следом за самой математической записью):
Определение -нотации
.
Расшифровка математической записи:
Утверджение эквивалентно (равносильно) утверждению, что существуют положительные константы и такие, что для любых значений , больших или равных , выполняется условие , то есть из выполнения условия следует выполнение условия .

Исходя из данного выше определения, обозначение носит название асимптотической оценки функции сверху и означает, что с увеличением параметра функция будет ограничена сверху значениями (не будет превышать значений) некоторой функции .
Обратите внимание: на самом деле представляет собой множество, содержащее в себе функцию , то есть можно сделать запись "", чтобы указать на тот факт, что является членом .

Однако, вместо использования математически правильной записи "", для удобства обычно используют менее точную (с математической точки зрения) запись "". Эта запись и соответствующий ей выше рисунок интуитивно воспринимаются читателем как: “Для всех значений , лежащих справа от , значения функции не превышает значения функции “.
Возвращаясь к алгоритму поиска минимального элемента в массиве размерностью и его времени работы , можем сделать очевидный вывод о существовании констант и таких, что будет выполняться условие для . Например, для и получаем, что для . Это и означает, что .
Итак, когда мы встречаем в тексте запись "", то это означает, что нами рассматривается условие . Если - минимальное из возможных значений константы , при котором всё ещё соблюдается указанное условие, то из этого очевидным образом следует, что данное условие будет соблюдаться для любого значения такого, что . То есть мы можем бесконечно увеличивать значение (начиная со значения ), и получаемая по мере увеличения этого параметра функция будет всё сильней и сильней отдаляться от оцениваемой функции , что в свою очередь будет означать, что мы просто расширяем область, охватываемую множеством , а сама функция всё также будет оставаться в этом множестве. Из этого можно сделать ещё один вывод: множество может быть каким угодно большим, главное, чтобы в это множество попадала исходная функция .

Очевидно, что если множество функций , имееющее порядок роста , содержит в себе исходную оцениваемую функцию , то это означает, что и множество функций , имеющее порядок роста больший, чем , также будет содержать в себе целевую функцию :
, где

Исходя из сказанного, оценку ранее упомянутого алгоритма поиска минимального элемента в массиве можно переписать в следующем виде:
Иными словами, с математической точки зрения, при определении асимптотической верхней границы, не очень то и важно, насколько близко функция находится к этой верхней границе, главное, чтобы функция росла не быстрей, чем растёт эта верхняя граница. В этом и кроется весь математический смысл асимптотического обозначения .
Однако, для оценки времени работы алгоритмов , условимся под асимптотическим обозначением понимать множество функций , обладающее для наименьшим из возможных порядков роста . То есть, если исходная функция , к примеру, является линейной (), то и для множества функций будет указываться линейный порядок роста ().
Для примера, рассмотрим некоторую квадратичную функцию и сравним для неё следующие асимптотические обозначения:
- ;
- .
Обе указанные записи являются корректными (с математической точки зрения), но только первый вариант даёт истинное понимание того, каким образом изменяется/растёт время работы алгоритма . В данном случае мы можем сказать, что время работы алгоритма с увеличением размера входных данных растёт не быстрей, чем квадратичная зависимость .
ВПЕРЁД ⇒
⇐ НАЗАД
Источники
- Павел Маврин “АиСД, Семестр 1, Лекция 1. Оценка времени. Сортировка слиянием”
- Big O нотация (Wiki)
- Томас Кормен “Алгоритмы. Построение и анализ”. Глава 3 “Рост функций”, параграф 3.1 “Асимптотические обозначения” (стр. 68-78).
Категория
Теги