Нотация Big O — это математическая нотация, которая описывает предельное поведение функции , когда аргумент стремится к определенному значению или бесконечности. Big O — это член семейства нотаций, изобретенных немецкими математиками Паулем Бахманом , [1] Эдмундом Ландау , [2] и другими , которые вместе называются нотацией Бахмана–Ландау или асимптотической нотацией . Буква O была выбрана Бахманом для обозначения Ordnung , что означает порядок приближения .
В информатике нотация «большое О» используется для классификации алгоритмов в соответствии с тем, как растут их требования к времени выполнения или пространству по мере увеличения размера входных данных. [3] В аналитической теории чисел нотация «большое О» часто используется для выражения границы разницы между арифметической функцией и более понятным приближением; известным примером такой разницы является остаточный член в теореме о простых числах . Нотация «большое О» также используется во многих других областях для предоставления аналогичных оценок.
Нотация Big O характеризует функции в соответствии с их темпами роста: различные функции с одинаковой асимптотической скоростью роста могут быть представлены с использованием одной и той же нотации O. Буква O используется потому, что темп роста функции также называется порядком функции . Описание функции в терминах нотации big O обычно дает только верхнюю границу темпа роста функции.
С обозначением O большое связано несколько родственных обозначений, использующих символы o , Ω, ω и Θ для описания других видов ограничений асимптотических темпов роста. [3]
Пусть оцениваемая функция будет действительной или комплексной функцией, а функция сравнения будет действительной функцией. Пусть обе функции определены на некотором неограниченном подмножестве положительных действительных чисел и не равны нулю (часто, но не обязательно, строго положительны) для всех достаточно больших значений [4] Пишут и читают « является большим O от » или чаще « имеет порядок », если абсолютное значение не более чем положительная константа, кратная абсолютному значению для всех достаточно больших значений То есть, если существует положительное действительное число и действительное число такое, что Во многих контекстах предположение о том, что нас интересует скорость роста при стремлении переменной к бесконечности или к нулю, остается невысказанным, и пишут проще, что Обозначение также можно использовать для описания поведения вблизи некоторого действительного числа (часто, ): мы говорим , что существуют положительные числа и такие, что для всех определенных с As не равно нулю для достаточно больших (или малых) значений оба эти определения можно объединить с помощью превосходного предела : если И в обоих этих определениях предельная точка (независимо от того , является ли она точкой кластера областей из и т. е. в каждой окрестности должно быть бесконечно много общих точек. Более того, как указано в статье о нижнем и верхнем пределе , (по крайней мере на расширенной числовой прямой ) всегда существует.
В информатике распространено несколько более ограничительное определение: и оба должны быть функциями из некоторого неограниченного подмножества положительных целых чисел в неотрицательные действительные числа; тогда если существуют положительные целые числа и такие, что для всех [5]
В типичном использовании обозначение O является асимптотическим, то есть относится к очень большим x . В этой ситуации вклад членов, которые растут «быстрее всего», в конечном итоге сделает остальные несущественными. В результате можно применить следующие правила упрощения:
Например, пусть f ( x ) = 6 x 4 − 2 x 3 + 5 , и предположим, что мы хотим упростить эту функцию, используя обозначение O , чтобы описать ее скорость роста по мере того, как x стремится к бесконечности. Эта функция является суммой трех членов: 6 x 4 , −2 x 3 и 5 . Из этих трех членов тот, у которого самая высокая скорость роста, имеет самую большую экспоненту как функцию от x , а именно 6 x 4 . Теперь можно применить второе правило: 6 x 4 является произведением 6 и x 4 , в котором первый множитель не зависит от x . Опуская этот множитель, получаем упрощенную форму x 4 . Таким образом, мы говорим, что f ( x ) является «большим O» от x 4 . Математически мы можем записать f ( x ) = O ( x 4 ) . Можно подтвердить это вычисление, используя формальное определение: пусть f ( x ) = 6 x 4 − 2 x 3 + 5 и g ( x ) = x 4 . Применяя формальное определение выше, утверждение, что f ( x ) = O ( x 4 ) эквивалентно его расширению, для некоторого подходящего выбора действительного числа x 0 и положительного действительного числа M и для всех x > x 0 . Чтобы доказать это, пусть x 0 = 1 и M = 13 . Тогда для всех x > x 0 : так что
Обозначение «О большое» имеет две основные области применения:
В обоих приложениях функция g ( x ), появляющаяся внутри O (·), обычно выбирается максимально простой, без постоянных множителей и членов низшего порядка.
Существуют два формально близких, но заметно отличающихся варианта использования этой записи: [ необходима ссылка ]
Однако это различие имеет место только в применении, а не в принципе — формальное определение «большого О» одинаково для обоих случаев, только с разными пределами для аргумента функции. [ оригинальное исследование? ]
Обозначение Big O полезно при анализе эффективности алгоритмов . Например, время (или количество шагов), необходимое для завершения задачи размера n, может быть найдено равным T ( n ) = 4 n 2 − 2 n + 2 . По мере того, как n становится большим, член n 2 начинает доминировать, так что всеми другими членами можно пренебречь — например, когда n = 500 , член 4 n 2 в 1000 раз больше члена 2 n . Игнорирование последнего имело бы пренебрежимо малое влияние на значение выражения для большинства целей. Кроме того, коэффициенты становятся несущественными, если мы сравниваем с любым другим порядком выражения, например, с выражением, содержащим член n 3 или n 4 . Даже если T ( n ) = 1 000 000 n 2 , если U ( n ) = n 3 , последний всегда будет превышать первый, как только n станет больше 1 000 000 , а именно. T (1 000 000) = 1 000 000 3 = U (1 000 000) . Кроме того, количество шагов зависит от деталей модели машины, на которой работает алгоритм, но разные типы машин обычно различаются только постоянным множителем в количестве шагов, необходимых для выполнения алгоритма. Поэтому нотация большого O отражает то, что осталось: мы пишем либо
или
и говорят, что алгоритм имеет порядок сложности n 2 . Знак " = " не предназначен для выражения "равно" в его обычном математическом смысле, а скорее для более разговорного "есть", поэтому второе выражение иногда считается более точным (см. обсуждение "Знака равенства" ниже), в то время как первое рассматривается некоторыми как злоупотребление обозначениями . [6]
Big O также может использоваться для описания члена ошибки в приближении к математической функции. Наиболее значимые члены записываются явно, а затем наименее значимые члены суммируются в один большой член O. Рассмотрим, например, экспоненциальный ряд и два его выражения, которые действительны, когда x мал:
Среднее выражение (с O ( x 3 )) означает, что абсолютное значение ошибки e x − (1 + x + x 2 /2) составляет максимум некоторую константу, умноженную на | x 3 |, когда x достаточно близок к 0.
Если функцию f можно записать как конечную сумму других функций, то наиболее быстрорастущая из них определяет порядок f ( n ) . Например,
В частности, если функция может быть ограничена полиномом от n , то при стремлении n к бесконечности можно пренебречь членами низшего порядка полинома. Множества O ( n c ) и O ( c n ) сильно различаются. Если c больше единицы, то последняя растет гораздо быстрее. Функция, которая растет быстрее, чем n c для любого c, называется суперполиномиальной . Функция, которая растет медленнее, чем любая показательная функция вида c n , называется субэкспоненциальной . Алгоритм может потребовать времени, которое является как суперполиномиальным, так и субэкспоненциальным; примерами этого являются самые быстрые известные алгоритмы для целочисленной факторизации и функция n log n .
Мы можем игнорировать любые степени n внутри логарифмов. Множество O (log n ) в точности такое же, как O (log( n c )) . Логарифмы отличаются только постоянным множителем (так как log( n c ) = c log n ), и, таким образом, большая нотация O игнорирует это. Аналогично, логарифмы с разными постоянными основаниями эквивалентны. С другой стороны, экспоненты с разными основаниями не имеют одного и того же порядка. Например, 2 n и 3 n не имеют одного и того же порядка.
Изменение единиц может повлиять или не повлиять на порядок результирующего алгоритма. Изменение единиц эквивалентно умножению соответствующей переменной на константу, где бы она ни появлялась. Например, если алгоритм выполняется в порядке n 2 , замена n на cn означает, что алгоритм выполняется в порядке c 2 n 2 , а большая нотация O игнорирует константу c 2 . Это можно записать как c 2 n 2 = O( n 2 ) . Если же алгоритм выполняется в порядке 2 n , замена n на cn дает 2 cn = (2 c ) n . Это не эквивалентно 2 n в общем случае. Изменение переменных также может повлиять на порядок результирующего алгоритма. Например, если время выполнения алгоритма равно O ( n ) при измерении в терминах количества n цифр входного числа x , то его время выполнения равно O (log x ) при измерении как функции самого входного числа x , потому что n = O (log x ) .
Если и тогда . Отсюда следует, что если и тогда . Другими словами, это второе утверждение говорит, что является выпуклым конусом .
Пусть k — ненулевая константа. Тогда . Другими словами, если , то
Большое O (и маленькое o, Ω и т. д.) также можно использовать с несколькими переменными. Чтобы формально определить большое O для нескольких переменных, предположим, что и — две функции, определенные на некотором подмножестве . Мы говорим
тогда и только тогда, когда существуют константы и такие, что для всех с для некоторых [7] Эквивалентно, условие, что для некоторых можно записать , где обозначает норму Чебышёва . Например, утверждение
утверждает, что существуют константы C и M такие, что
всякий раз, когда выполняется или . Это определение позволяет всем координатам увеличиваться до бесконечности. В частности, утверждение
(т.е. ) весьма отличается от
(т.е. ).
Согласно этому определению, подмножество, на котором определена функция, имеет значение при обобщении утверждений из одномерной настройки в многомерную настройку. Например, если и , то если мы ограничим и до , но не если они определены на .
Это не единственное обобщение большого О на многомерные функции, и на практике существует некоторая непоследовательность в выборе определения. [8]
Высказывание « f ( x ) есть O [ g ( x ) ] », как определено выше, обычно записывается как f ( x ) = O [ g ( x ) ] . Некоторые считают это злоупотреблением обозначениями , поскольку использование знака равенства может ввести в заблуждение, поскольку оно предполагает симметрию, которой это высказывание не имеет. Как говорит де Брейн , O [ x ] = O [ x 2 ] верно, но O [ x 2 ] = O [ x ] — нет. [9] Кнут описывает такие высказывания как «односторонние равенства», поскольку если бы стороны можно было поменять местами, «мы могли бы вывести нелепые вещи вроде n = n 2 из тождеств n = O [ n 2 ] и n 2 = O [ n 2 ] ». [10] В другом письме Кнут также указал, что
По этим причинам было бы точнее использовать обозначение множеств и записывать f ( x ) ∈ O [ g ( x ) ] (читается как: « f ( x ) является элементом O [ g ( x ) ] » или « f ( x ) находится во множестве O [ g ( x ) ]»), думая об O [ g ( x ) ] как о классе всех функций h ( x ) таких, что | h ( x ) | ≤ C | g ( x ) | для некоторого положительного действительного числа C . [10] Однако использование знака равенства является общепринятым. [9] [10]
Обозначение Big O также может использоваться в сочетании с другими арифметическими операторами в более сложных уравнениях. Например, h ( x ) + O ( f ( x )) обозначает набор функций, имеющих рост h ( x ) плюс часть, рост которой ограничен ростом f ( x ). Таким образом,
выражает то же самое, что и
Предположим, что разрабатывается алгоритм для работы с набором из n элементов. Его разработчики заинтересованы в поиске функции T ( n ), которая будет выражать, сколько времени займет выполнение алгоритма (в некоторой произвольной единице измерения времени) в терминах количества элементов во входном наборе. Алгоритм работает, сначала вызывая подпрограмму для сортировки элементов в наборе, а затем выполняя свои собственные операции. Сортировка имеет известную временную сложность O ( n 2 ), и после запуска подпрограммы алгоритм должен выполнить дополнительные 55 n 3 + 2 n + 10 шагов, прежде чем он завершится. Таким образом, общая временная сложность алгоритма может быть выражена как T ( n ) = 55 n 3 + O ( n 2 ) . Здесь члены 2 n + 10 включены в быстрорастущий O ( n 2 ). Опять же, это использование игнорирует часть формального значения символа "=", но оно позволяет использовать большую нотацию O как своего рода удобный плейсхолдер.
В более сложном использовании O (·) может появляться в разных местах уравнения, даже несколько раз с каждой стороны. Например, для верны следующие утверждения : Значение таких утверждений следующее: для любых функций, которые удовлетворяют каждому O (·) с левой стороны, существуют некоторые функции, удовлетворяющие каждому O (·) с правой стороны, такие, что подстановка всех этих функций в уравнение делает обе стороны равными. Например, третье уравнение выше означает: «Для любой функции f ( n ) = O (1) существует некоторая функция g ( n ) = O ( e n ) такая, что n f ( n ) = g ( n )». В терминах «множественной нотации» выше, значение заключается в том, что класс функций, представленных левой стороной, является подмножеством класса функций, представленных правой стороной. В этом использовании «=" является формальным символом, который в отличие от обычного использования «=" не является симметричным отношением . Так, например, n O (1) = O ( e n ) не подразумевает ложного утверждения O ( e n ) = n O (1) .
Большая O набирается как курсивная заглавная «O», как в следующем примере: . [12] [13] В TeX она получается простым набором O в математическом режиме. В отличие от греческих обозначений Бахмана–Ландау, ей не нужен специальный символ. Однако некоторые авторы используют вместо этого каллиграфический вариант . [14] [15]
Вот список классов функций, которые обычно встречаются при анализе времени выполнения алгоритма. В каждом случае c — положительная константа, а n увеличивается без ограничений. Медленно растущие функции обычно перечисляются первыми.
Утверждение иногда ослабляется до для вывода более простых формул для асимптотической сложности. Для любого и , является подмножеством для любого , поэтому может рассматриваться как многочлен с некоторым большим порядком.
Большое O широко используется в информатике. Вместе с некоторыми другими связанными обозначениями оно образует семейство обозначений Бахмана–Ландау. [ необходима цитата ]
Интуитивно утверждение " f ( x ) is o ( g ( x )) " (читается как " f ( x ) is little-o of g ( x ) " или " f ( x ) is of lower order to g ( x ) ") означает, что g ( x ) растет гораздо быстрее, чем f ( x ) , или, что эквивалентно, f ( x ) растет гораздо медленнее, чем g ( x ) . Как и прежде, пусть f будет действительной или комплекснозначной функцией, а g — действительной функцией, обе определенные на некотором неограниченном подмножестве положительных действительных чисел , так что g ( x ) строго положительна для всех достаточно больших значений x . Пишется
если для каждой положительной константы ε существует константа такая, что
Например, у одного есть
Разница между определением нотации big-O и определением little-o заключается в том, что в то время как первое должно быть верным по крайней мере для одной константы M , последнее должно быть верным для каждой положительной константы ε , какой бы малой она ни была. [17] Таким образом, нотация little-o делает более сильное утверждение , чем соответствующая нотация big-O: каждая функция, которая является little-o от g , также является big-O от g , но не каждая функция, которая является big-O от g , является little-o от g . Например, но .
Если g ( x ) не равен нулю или, по крайней мере, становится ненулевым после определенной точки, то соотношение эквивалентно следующему:
Little-o уважает ряд арифметических операций. Например,
Он также удовлетворяет соотношению транзитивности :
Другая асимптотическая нотация — , читается как «большая омега». [18] Существуют два распространенных и несовместимых определения утверждения
где a — некоторое действительное число , или , где f и g — действительные функции, определенные в окрестности a , и где g положительно в этой окрестности.
Определение Харди–Литтлвуда используется в основном в аналитической теории чисел , а определение Кнута — в основном в теории сложности вычислений ; определения не эквивалентны.
В 1914 году Г. Х. Харди и Дж. Э. Литтлвуд ввели новый символ [19], который определяется следующим образом:
Таким образом, отрицание
В 1916 году те же авторы ввели два новых символа и определили их как: [20]
Эти символы использовались Э. Ландау с теми же значениями в 1924 году. [21] Однако авторы, последовавшие за Ландау, использовали другую нотацию для тех же определений: [ необходима ссылка ] Символ был заменен текущей нотацией с тем же определением и стал
Эти три символа , а также (что означает, что и оба удовлетворяются), в настоящее время используются в аналитической теории чисел . [22] [23]
У нас есть
и точнее
У нас есть
и точнее
однако
В 1976 году Дональд Кнут опубликовал статью, в которой обосновал использование им символа - для описания более сильного свойства. [24] Кнут писал: «Для всех приложений, которые я видел до сих пор в компьютерной науке, более сильное требование ... гораздо более уместно». Он определил
с комментарием: «Хотя я изменил определение Харди и Литтлвуда , я чувствую себя вправе сделать это, поскольку их определение никоим образом не используется широко, и поскольку существуют другие способы выразить то, что они хотят сказать, в сравнительно редких случаях, когда применимо их определение». [24]
Определения пределов предполагают для достаточно больших . Таблица (частично) отсортирована от наименьшего к наибольшему, в том смысле, что (версия Кнута) на функциях соответствует на действительной прямой [27] (версия Харди–Литтлвуда , однако, не соответствует ни одному такому описанию).
В компьютерной науке используются обозначения big , big Theta , little , little omega и big Omega Кнута . [28] Аналитическая теория чисел часто использует обозначения big , small , Hardy , [29] Hardy–Littlewood's big Omega (с индексами +, − или ± или без них) и . [22] Обозначение small omega не так часто используется в анализе. [30]
Неформально, особенно в информатике, нотация «большое О» часто может использоваться несколько иначе для описания асимптотически жесткой границы, тогда как использование нотации «большое Тета Θ» может быть более фактически уместным в данном контексте. [31] Например, при рассмотрении функции T ( n ) = 73 n 3 + 22 n 2 + 58 все нижеследующее, как правило, приемлемо, но более жесткие границы (такие как числа 2 и 3 ниже) обычно настоятельно предпочтительны по сравнению с более свободными границами (такими как число 1 ниже).
Эквивалентные английские утверждения соответственно следующие:
Итак, хотя все три утверждения верны, в каждом из них содержится все больше информации. Однако в некоторых областях нотация big O (номер 2 в приведенных выше списках) будет использоваться чаще, чем нотация big Theta (пункты под номером 3 в приведенных выше списках). Например, если T ( n ) представляет время выполнения недавно разработанного алгоритма для входных данных n , изобретатели и пользователи алгоритма могут быть более склонны устанавливать верхнюю асимптотическую границу того, сколько времени потребуется для его выполнения, не делая явного заявления о нижней асимптотической границе.
В своей книге «Введение в алгоритмы» Кормен , Лейзерсон , Ривест и Стайн рассматривают множество функций f , которые удовлетворяют
В корректной записи это множество можно, например, обозначить как O ( g ), где
[32]
Авторы утверждают, что использование оператора равенства (=) для обозначения принадлежности множеству вместо оператора принадлежности множеству (∈) является злоупотреблением обозначениями, но у такого подхода есть свои преимущества. [6] Внутри уравнения или неравенства использование асимптотической записи означает анонимную функцию в множестве O ( g ), которая устраняет члены низшего порядка и помогает уменьшить несущественный беспорядок в уравнениях, например: [33]
Другая нотация, иногда используемая в информатике, — это Õ (читается как soft-O ), которая скрывает полилогарифмические множители. Используются два определения: некоторые авторы используют f ( n ) = Õ ( g ( n )) как сокращение для f ( n ) = O ( g ( n ) log k n ) для некоторых k , в то время как другие используют его как сокращение для f ( n ) = O ( g ( n ) log k g ( n )) . [34] Когда g ( n ) является полиномом по n , разницы нет; однако последнее определение позволяет сказать, например, что в то время как первое определение допускает для любой константы k . Некоторые авторы пишут O * для той же цели, что и последнее определение. [35] По сути, это большая нотация O , игнорирующая логарифмические факторы , поскольку эффекты скорости роста некоторой другой суперлогарифмической функции указывают на взрыв скорости роста для входных параметров большого размера, что более важно для прогнозирования плохой производительности во время выполнения, чем более тонкие эффекты, вносимые логарифмическим фактором(ами) роста. Эта нотация часто используется, чтобы избежать «придирок» в пределах скоростей роста, которые заявлены как слишком жестко ограниченные для рассматриваемых вопросов (поскольку log k n всегда равен o ( n ε ) для любой константы k и любого ε > 0 ).
Также обозначение L определяется как
удобно для функций, которые находятся между полиномиальными и экспоненциальными по .
Обобщение на функции, принимающие значения в любом нормированном векторном пространстве, является простым (замена абсолютных значений нормами), где f и g не обязаны принимать свои значения в одном и том же пространстве. Обобщение на функции g , принимающие значения в любой топологической группе, также возможно [ требуется ссылка ] . «Ограничительный процесс» x → x o также может быть обобщен путем введения произвольной базы фильтра , т. е. направленных сетей f и g . Обозначение o может использоваться для определения производных и дифференцируемости в довольно общих пространствах, а также (асимптотической) эквивалентности функций,
что является отношением эквивалентности и более ограничивающим понятием, чем отношение « f есть Θ( g )» из вышеприведенного. (Оно сводится к lim f / g = 1, если f и g являются положительными действительными функциями.) Например, 2 x есть Θ( x ), но 2 x − x не есть o ( x ).
Символ O был впервые введен теоретиком чисел Паулем Бахманом в 1894 году во втором томе его книги Analytische Zahlentheorie (« Аналитическая теория чисел »). [1] Теоретик чисел Эдмунд Ландау принял его и, таким образом, был вдохновлен введением в 1909 году обозначения o; [2] поэтому оба теперь называются символами Ландау. Эти обозначения использовались в прикладной математике в 1950-х годах для асимптотического анализа. [36] Символ (в смысле «не является o в ») был введен в 1914 году Харди и Литтлвудом. [19] Харди и Литтлвуд также ввели в 1916 году символы («правый») и («левый»), [20] предшественники современных символов («не меньше, чем малая o в») и («не больше, чем малая o в»). Таким образом, символы Омега (с их первоначальными значениями) иногда также называют «символами Ландау». Эта нотация стала широко использоваться в теории чисел, по крайней мере, с 1950-х годов. [37]
Символ , хотя он использовался и раньше с разными значениями, [27] получил свое современное определение от Ландау в 1909 году [38] и Харди в 1910 году. [39] Чуть выше на той же странице своего трактата Харди определил символ , где означает, что выполняются оба и . Эта нотация до сих пор используется в аналитической теории чисел. [40] [29] В своем трактате Харди также предложил символ , где означает, что для некоторой константы .
В 1970-х годах большая буква O была популяризирована в компьютерной науке Дональдом Кнутом , который предложил другую нотацию для Харди и предложил другое определение для нотации Харди и Литтлвуда Omega. [24]
Два других символа, придуманных Харди, были (в терминах современной нотации O )
(Харди, однако, никогда не определял и не использовал обозначение , ни , как это иногда сообщалось). Харди ввел символы и (а также уже упомянутые другие символы) в своем трактате 1910 года «Порядки бесконечности» и использовал их только в трех статьях (1910–1913). В своих почти 400 оставшихся статьях и книгах он последовательно использовал символы Ландау O и o.
Символы Харди и (а также ) больше не используются. С другой стороны, в 1930-х годах [41] русский теоретик чисел Иван Матвеевич Виноградов ввел свою нотацию , которая все чаще используется в теории чисел вместо нотации. Мы имеем
и часто обе нотации используются в одной и той же статье.
Большая буква O изначально означает «порядок» («Ordnung», Bachmann 1894) и, таким образом, является латинской буквой. Ни Бахман, ни Ландау никогда не называли ее «Омикроном». Этот символ гораздо позже (1976) рассматривался Кнутом как заглавный омикрон [24] , вероятно, в связи с его определением символа Омега . Цифра ноль не должна использоваться.
Поскольку θ ( g ( n )) является множеством, мы могли бы написать " f ( n ) ∈ θ ( g ( n ))", чтобы указать, что f ( n ) является членом θ ( g ( n )). Вместо этого мы обычно будем писать f ( n ) = θ ( g ( n )) для выражения того же понятия. Вас может смутить, потому что мы таким образом злоупотребляем равенством, но позже в этом разделе мы увидим, что это имеет свои преимущества.
Когда у нас есть только асимптотическая верхняя граница, мы используем O-нотацию. Для заданной функции g ( n ) мы обозначаем через O ( g ( n )) (произносится как «биг-оу g от n » или иногда просто «оу g от n » ) множество функций O ( g ( n )) = { f ( n ) : существуют положительные константы c и n 0 такие, что 0 ≤ f ( n ) ≤ cg ( n ) для всех n ≥ n 0 }
Когда асимптотическая запись стоит отдельно (то есть не внутри более крупной формулы) в правой части уравнения (или неравенства), как в n = O(n 2 ), мы уже определили знак равенства для обозначения принадлежности к множеству: n ∈ O(n 2 ). Однако, в общем случае, когда асимптотическая запись появляется в формуле, мы интерпретируем ее как обозначение некоторой анонимной функции, которую мы не хотим называть. Например, формула 2 n 2 + 3 n + 1 = 2 n 2 + θ ( n ) означает, что 2 n 2 + 3 n + 1 = 2 n 2 + f ( n ), где f ( n ) — некоторая функция из множества θ ( n ). В этом случае мы даем f ( n ) = 3 n + 1, что действительно входит в θ ( n ). Использование асимптотической записи таким образом может помочь устранить несущественные детали и беспорядок в уравнении.