
- •Понятие алгоритма, его свойства.
- •Возникновение и история развития теории алгоритмов.
- •Основные определения.
- •Сравнительные оценки алгоритмов.
- •Система обозначений в анализе алгоритмов.
- •Классификация алгоритмов по виду функции трудоёмкости.
- •Асимптотический анализ функций.
- •Элементарные операции в языке записи алгоритмов.
- •Трудоемкость алгоритмов и временные оценки.
- •10. Понятия рекурсии и вычислимой функции.
- •Простейшие рекурсивные функции.
- •12. Операция суперпозиции частичных функций.
- •13. Операция примитивной рекурсии частичных функций.
- •14. Операция минимизации арифметических функций.
- •15. Частично рекурсивные функции и тезис Чёрча.
- •16. Понятие алгоритма как абстрактной машины.
- •17. Алгоритмическая машина Поста (определение, команды, принцип работы).
- •18. Алгоритмическая машина Тьюринга (определение, команды, схема функционирования).
- •19. Алгоритмически неразрешимые задачи (примеры).
- •20. Теоретический предел трудоемкости задачи.
- •21. Сложностные классы задач.
- •Класс npc (np – полные задачи)
- •Класс npc (np – полные задачи)
- •Примеры np – полных задач
- •23. Полиномиально проверяемые задачи.
- •24. Анализ алгоритма точного решения задачи о сумме
- •Формулировка задачи и асимптотическая оценка
- •V содержит 1 слагаемое вариантов;
- •V содержит 2 слагаемых вариантов;
- •V содержит 3 слагаемых вариантов;
- •Алгоритм точного решения задачи о сумме (метод перебора)
- •Анализ алгоритма точного решения задачи о сумме
20. Теоретический предел трудоемкости задачи.
Рассматривая
некоторую алгоритмически разрешимую
задачу, и анализируя один из алгоритмов
ее решения, мы можем получить оценку
трудоемкости этого алгоритма в худшем
случае – fa(
)=O(g(
)).
Такие же оценки мы можем получить и для
других известных алгоритмов решения
данной задачи. Рассматривая задачу с
этой точки зрения, возникает резонный
вопрос – а существует ли функциональный
нижний предел для g(
)
и если «да», то существует ли алгоритм,
решающий задачу с такой трудоемкостью
в худшем случае.
Другая, более точная формулировка, имеет следующий вид: какова оценка сложности самого «быстрого» алгоритма решения данной задачи в худшем случае? Очевидно, что это оценка самой задачи, а не какого либо алгоритма ее решения. Таким образом, мы приходим к определению понятия функционального теоретического нижнего предела трудоемкости задачи в худшем случае:
=
min {
(
(D))
}
Если мы можем на основе теоретических рассуждений доказать существование и получить оценивающую функцию, то мы можем утверждать, что любой алгоритм, решающий данную задачу работает не быстрее, чем с оценкой в худшем случае:
(D) = ( )
Приведем ряд примеров:
Задача поиска максимума в массиве A=(a1,…,an) – для этой задачи, очевидно должны быть просмотрены все элементы, и = (n).
Задача умножения матриц - для этой задачи можно сделать предположение, что необходимо выполнить некоторые арифметические операции со всеми исходными данными, теоретическое обоснование какой–либо другой оценки на сегодня не известно, что приводит нас к оценке =Q ( ). Отметим, что лучший алгоритм умножения матриц имеет оценку Q (
). Расхождение между теоретическим пределом и оценкой лучшего известного алгоритма позволяет предположить, что либо существует, но еще не найден более быстрый алгоритм умножения матриц, либо оценка Q ( ) должна быть доказана, как теоретический предел.
21. Сложностные классы задач.
В начале 1960-х годов, в связи с началом широкого использования вычислительной техники для решения практических задач, возник вопрос о границах практической применимости данного алгоритма решения задачи в смысле ограничений на ее размерность. Какие задачи могут быть решены на ЭВМ за реальное время?
Ответ на этот вопрос был дан в работах Кобмена (Alan Cobham, 1964), и Эдмнодса (Jack Edmonds, 1965), где были введены сложностные классы задач.
1) Класс P (задачи с полиномиальной сложностью)
Задача
называется полиномиальной, т.е. относится
к классу P, если существует константа k
и алгоритм, решающий задачу с
(n)=O(
),
где n - длина входа алгоритма в битах n =
|D| [6].
Задачи класса P – это интуитивно, задачи, решаемые за реальное время.
Отметим следующие преимущества алгоритмов из этого класса:
для большинства задач из класса P константа k меньше 6;
класс P инвариантен по модели вычислений (для широкого класса моделей);
класс P обладает свойством естественной замкнутости (сумма или произведение полиномов есть полином).
Таким образом, задачи класса P есть уточнение определения «практически разрешимой» задачи.
2) Класс NP (полиномиально проверяемые задачи)
Представим себе, что некоторый алгоритм получает решение некоторой задачи – соответствует ли полученный ответ поставленной задаче, и насколько быстро мы можем проверить его правильность?
Рассмотрим, например задачу о сумме:
Дано N чисел – А = (a1,…an) и число V.
Задача: Найти вектор (массив) X=(x1,…,xn), xiє{0,1}, такой, что aixi = V.
Содержательно: может ли быть представлено число V в виде суммы каких-либо элементов массива А.
Если какой-то алгоритм выдает результат – массив X, то проверка правильности этого результата может быть выполнена с полиномиальной сложно-стью: проверка aixi = V требует не более Q (N) операций.
Формально:
Dє
,
|D|=n поставим в соответствие сертификат
Sє
,
такой что |S|=O (
)
и алгоритм
=
(D,S),
такой, что он выдает «1», если решение
правильно, и «0», если решение неверно.
Тогда задача принадлежит классу NP, если
F (
)=O
(
).
Содержательно задача относится к классу NP, если ее решение некоторым алгоритмом может быть быстро (полиномиально) проверено.