Лекции 12-13 Анализ трудоемкости алгоритмов

advertisement
Анализ трудоёмкости алгоритмов
Анализ трудоёмкости алгоритмов
позволяет найти оптимальный алгоритм для
решения данной задачи.
В качестве критерия оптимальности
алгоритма берут трудоемкость алгоритма количество элементарных операций, которые
необходимо выполнить для решения задачи с
помощью данного алгоритма. Функцией
трудоемкости называется отношение,
связывающие входные данные алгоритма с
количеством элементарных операций.
Анализ трудоёмкости алгоритмов
Трудоёмкость алгоритмов по-разному
зависит от входных данных.
Для некоторых алгоритмов трудоемкость
зависит только от объёма данных, для других
алгоритмов — от значений данных, иногда –
от порядка поступления данных.
Трудоёмкость многих алгоритмов может в
той или иной мере зависеть от всех
перечисленных выше факторов.
Анализ трудоёмкости алгоритмов –
асимптотический анализ
Это один из упрощенных видов анализа
алгоритмов.
Целью асимптотического анализа является
сравнение затрат времени (и других ресурсов)
различными алгоритмами, предназначенными
для решения одной и той же задачи, при
больших объёмах входных данных.
В асимптотическом анализе оценка функции
трудоёмкости называется сложность алгоритма.
Она позволяет определить, как быстро растет
трудоёмкость алгоритма с увеличением объёма
данных.
Асимптотический анализ
В асимптотическом анализе алгоритмов используются
обозначения, принятые в математическом
асимптотическом анализе. Основной оценкой функции
сложности алгоритма f(n) является оценка ,
где n — величина объёма данных (длина входа).
Говорят, что
‘функция g(n)
является асимптотически точной оценкой функции f(n)
если c1g1(n) ≤ f(n) ≤ c2g2(n)
Т.Е.
при достаточно больших n f(n) будет заключена
между
и
Оценка  функции f(n)
Оценка  функции f(n)
Говорят ещё, что функция g(n) является
асимптотически точной оценкой функции f(n),
так как по определению функция f(n) не
отличается от функции g(n) с точностью до
постоянного множителя.
дает одновременно верхнюю и нижнюю
оценки роста функции. Часто бывает
необходимо рассматривать эти оценки по
отдельности.
Оценка О функции f(n)
Оценка О представляет собой верхнюю
асимптотическую оценку трудоемкости алгоритма.
Запись
‘функция g(n) является верхней асимптотической
оценкой функции f(n)
f(n) ≤ c g(n)
означает, что f(n) принадлежит классу функций,
которые растут не быстрее, чем функция g(n) с
точностью до постоянного множителя.
Оценка О функции f(n)
Оценка  функции f(n)
Оценка  задает нижнюю асимптотическую
оценку роста функции f(n) и определяет класс
функций, которые растут не медленнее, чем g(n) с
точностью до постоянного множителя.
обозначает класс функций,
которые растут не медленнее, чем
В этот класс попадают все полиномы со степенью
большей единицы, равно как и все степенные функции
с основанием большим единицы.
Оценка  функции f(n)
Равенство
выполняется тогда и только
тогда, когда
И
Классификация задач
по классам сложности
Классификация задач по классам сложности –
(P-сложные, NP-сложные, экспоненциально сложные и
др.).
К классу P относятся задачи, которые могут быть
решены за время, полиномиально зависящее от объёма
исходных данных, с помощью детерминированной
вычислительной машины (машины Тьюринга);
а к классу NP — задачи, которые могут быть решены за
полиномиально выраженное время с помощью
недетерминированной вычислительной машины, то есть
машины, следующее состояние которой не всегда
однозначно определяется предыдущими.
История вопроса
В начале 1960-х годов в связи с началом
широкого использования вычислительной
техники для решения практических задач возник
вопрос о границах практической применимости
данного алгоритма решения задачи в смысле
ограничений на ее размерность. Какие задачи
могут быть решены на ЭВМ за реальное
время?
Ответ на этот вопрос был дан в работах
Кобмена (Alan Cobham, 1964) и Эдмондса (Jack
Edmonds, 1965), в которых были введены классы
сложности задач.
Класс P (задачи с полиномиальной
сложностью)
Задача называется полиномиальной
(относится к классу P), если
существуют константа k и алгоритм,
решающий задачу с Fa (n) = O(nk ),
где n - длина входа алгоритма.
Задачи класса P – это интуитивно задачи,
решаемые за реальное время.
Отметим следующие преимущества
алгоритмов из этого класса:
1. для большинства задач из класса P константа k < 6;
2. класс P инвариантен по модели вычислений (для
широкого класса моделей);
3. класс P обладает свойством естественной
замкнутости (сумма или произведение полиномов
есть полином).
Таким образом, задачи класса P - уточнение
определения «практически разрешимой»
задачи.
Класс NP (полиномиально
проверяемые задачи)
Представим себе, что алгоритм получил решение
задачи. Соответствует ли полученный ответ
поставленной задаче, и насколько быстро мы можем
проверить его правильность?
Рассмотрим задачу о сумме:
Можно ли представить число V в виде суммы какихлибо элементов массива А?
Дано n чисел – А = (a1,…an) и число V.
Найти X=(x1,…,xn), xiє{0,1}, чтобы aixi = V.
Класс NP (полиномиально
проверяемые задачи)
Если какой-то алгоритм выдает результат –
массив X, то проверка правильности этого
результата может быть выполнена с
полиномиальной сложностью:
проверка aixi = V требует не более Q (n)
операций.
Содержательно задача относится к классу NP,
если ее решение некоторым алгоритмом может
быть быстро (полиномиально) проверено.
Класс NP (полиномиально
проверяемые задачи)
Другое определение класса NP: к классу NP
относятся задачи, решение которых с помощью
дополнительной информации полиномиальной
длины, данной нам свыше, мы можем
проверить за полиномиальное время.
В частности, к классу NP относятся все задачи,
решение которых можно проверить за
полиномиальное время. Класс P содержится в
классе NP. Классическим примером NP-задачи
является задача о коммивояжёре.
Очевидно, что любая задача,
принадлежащая классу P, принадлежит и
классу NP, т.к. она может быть
полиномиально проверена – задача
проверки решения может состоять просто в
повторном решении задачи.
На сегодня отсутствуют теоретические
доказательства как совпадения этих классов
(P=NP), так и их несовпадения.
Предположение состоит в том, что класс P
является собственным подмножеством
класса NP, т.е. NP \ P не пустое.
Download