Асимптотические обозначения времени выполнения программ. Оценки снизу, сверху, асимптотически точные. Правило суммы и правило произведения
Для описания асимптотических оценок имеется система нотаций:
§ Говорят, что f(n)=O(g(n)), если существует такая константа c>0 и такое число n0, что выполняется условие 0≤f(n)≤c*g(n) для всех n≥n0. Более формально:
( ( )) { ( ) | 0, , [0 ( ) ( )]} 0 0 O g n = f n $c > $n "n > n £ f n £ cg n
O(g(n)) используется для указания функций, которые не более чем в постоянное число раз превосходят g(n), этот вариант используется для описания оценок сверху (в смысле «не хуже чем»). Когда речь идет о конкретном алгоритме решения конкретной задачи, то целью анализа временной сложности этого алгоритма является получение оценки для времени в худшем или в среднем, обычно асимптотической оценки сверху O(g(n)), при возможности – и асимптотической оценки снизу W(g(n)), а еще лучше - асимптотически точной оценки Q(g(n)).
Но при этом остается вопрос – а могут ли быть для этой задачи алгоритмы решения еще лучше? Этот вопрос ставит задачу о нахождении нижней оценки временной сложности для самой задачи (по всем возможным алгоритмам ее решения, а не для одного из известных алгоритмов ее решения). Вопрос получения нетривиальных нижних оценок очень сложный. На сегодняшний день имеется не так уж много таких результатов, но для некоторых ограниченных моделей вычислителей доказаны нетривиальные нижние оценки, и некоторые из них играют важную роль в практическом программировании. Одной из задач, для которых известна нижняя оценка временной сложности, является задача сортировки:
§ Дана последовательность из n элементов a1,a2,... an, выбранных из множества, на котором задан линейный порядок.
§ Требуется найти перестановку p этих n элементов, которая отобразит данную последовательность в неубывающую последовательность ap(1),ap(2),... ap(n), т.е. ap(i)≤ap(i+1) при 1≤i<n. Для этой задачи доказана нижняя оценка временной сложности W(nlog(n)) для ограниченной модели вычислителя типа «дерево решений» [4 п.8.1.], т.е. нет алгоритмов (в определенном классе), решающих эту задачу, лучше (по порядку). Отметим, что алгоритмы, решающие эту задачу за такое время, известны, т.е. Q(nlog(n)) является асимптотически точной оценкой и для этой задачи и для этих алгоритмов ее решения. В оценках временной сложности задач и алгоритмов их решения важное положение занимает метод сведения. Пусть у нас есть две задачи A и B, которые связаны так, что задачу A можно решить следующим образом:
1) Исходные данные к задаче A преобразуются в соответствующие исходные
данные для задачи B.
2) Решается задача B.
3) Результат решения задачи B преобразуется в правильное решение задачи A .__ В этом случае мы говорим, что задача A сводима к задаче B. Если шаги (1) и (3) вышеприведенного сведения можно выполнить за время O(t(n)), где, как обычно, n – 25 «объем» задачи A , то скажем, что A t(n)-сводима к B, и запишем это так: A μt(n) B. Вообще говоря, сводимость не симметричное отношение, в частном случае, когда A и B взаимно сводимы, мы назовем их эквивалентными. Следующие два самоочевидных утверждения характеризуют мощь метода сведения в предположении, что это сведение сохраняет порядок «объема» задачи.
«O» большое и «o» малое ( и
) — математические обозначения для сравнения асимптотического поведения функций. Используются в различных разделах математики, но активнее всего — в математическом анализе, теории чисел и комбинаторике, а также в информатике и теории алгоритмов.
, «о малое от » обозначает «бесконечно малое относительно »[, пренебрежимо малую величину при рассмотрении . Смысл термина «О большое» зависит от его области применения, но всегда растёт не быстрее, чем , «O большое от » (точные определения приведены ниже).
В частности:
Продолжение 7
фраза «сложность алгоритма есть » означает, что с увеличением параметра , характеризующего количество входной информации алгоритма, время работы алгоритма не может быть ограничено величиной, которая растет медленнее, чем n!;
фраза «функция является „о“ малым от функции в окрестности точки » означает, что с приближением к уменьшается быстрее, чем (отношение стремится к нулю).
Правило суммы: Пусть конечное множество M разбито на два непересекающихся подмножества M1 и M2 (в объединении дающих все множество М). Тогда мощность |M| = |M1| + |M2|.
Правило произведения: Пусть в некотором множестве объект а может быть выбран n способами, и после этого (то есть после выбора объекта а) объект b может быть выбран m способами. Тогда объект ab может быть выбран n*m способами.
Замечание: Оба правила допускают индуктивное обобщение. Если конечное множество М допускает разбиение на r попарно непересекающихся подмножеств M1, M2,…,Mr, то мощность |M| = |M1|+|M2|+…+|Mr|. Если объект A1 может быть выбран k1способами, затем (после выбора объекта A1) объект A2 может быть выбран k2способами, и так далее и наконец, объект AR может быть выбран kr способами, то объект А1 А2 …Аr может быть выбран k1 k2 …kr способами.