- •Методическое пособие по дисциплине Теория сложности вычислений
- •6.080200 Прикладная математика
- •Симферополь, 2004
- •Основные понятия теории алгоритмической
- •Сложности решения дискретных задач
- •1.Алгоритм
- •2. Класс p и эффективные вычисления
- •Значение разбиения задач на классы по сложности становится понятным, если рассмотреть следующие практические соображения.
- •3. Недетерминированные алгоритмы и класс np.
- •4. Класс nр - полных задач
- •Теорема 4.1 [1].
- •5. Теорема Кука: первая nр - полная задача
- •Теорема_5.1. (Сoоk s.A., 1971).
- •Введем вспомогательную функцию
- •6. Другие nр- полные задачи.
- •7. Пример доказательства np- полноты задачи методом сведения.
- •8. Список nр- полных задач.
- •9. Матроиды и жадные алгоритмы.
- •Задача 9.2. Дана матрица с целыми неотрицательными
- •Задача 9.3. Дано конечное множество е, семейство его подмножеств ( - булеан множества е) и функция
- •Множество b j не будет содержаться во множестве s, выбранном
- •Содержание
2. Класс p и эффективные вычисления
Временная (пространственная) сложность называется полиномиальной, если имеет вид P(n) , где P(.) - некоторый полином от размера задачи n.
Определение 2.1. Классом Р называется множество всех задач, для которых существует алгоритм решения, имеющий полиномиальную сложность.
Алгоритмы с
полиномиальной сложностью называют
эффективными в
отличие от алгоритмов, для которых
временная или пространственная сложность
как функции размера задачи не могут
быть представлены полиномами. Алгоритмы,
сложность которых оценивается как
(с экспоненциальной сложностью)
эффективными не являются. С учетом,
например, того, что при
справедливо неравенство
,
хотя
,
имеет смысл говорить об асимптотической
сложности алгоритмов. Умножение функции
сложности на константу принципиально
не изменяет эту характеристику сложности
задачи.
Значение разбиения задач на классы по сложности становится понятным, если рассмотреть следующие практические соображения.
Пусть
решая некоторую задачу Z
на компьютере
можно было потратить Т
единиц времени бесперебойной работы
(без отказов, выключений и пр.). Переход
на компьютер
с быстродействием в 10 раз большим можно
считать эквивалентным увеличению
времени бесперебойной работы в десять
раз и равным 10Т.
Если наибольшую размерность задачи,
практически решаемой на компьютере
обозначить
, а на
,
то для произвольной временной сложности
-можно
составить уравнение:
разрешив
которое относительно
, можно увидеть, на сколько может быть
увеличена размерность решаемых задач
при переходе на компьютер с большим на
порядок быстродействием. Например, при
получим:
.
Но
если
,
то
.
Если вам удавалось решать некоторую
задачу с матрицей размерности 100, и
эта задача имеет экспоненциальную сложность, то увеличить размерность, заменив компьютер на в десять раз более
быстродействующий,
удастся лишь до величины
.
Приведенная ниже таблица (заимствованная из [1]), ярко иллюстрирует значение функции сложности.
Сложность |
Современные ЭВМ |
ЭВМ в 100 раз более быстрые |
ЭВМ в 1000 раз более быстрые |
n |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3. Недетерминированные алгоритмы и класс np.
Чтобы ввести сложное и являющееся примером исключительной
абстракции понятие недетерминированного алгоритма, рассмотрим одну простую схему решения задачи коммивояжера в следующей постановке: существует ли в данном конечном графе с заданными длинами дуг гамильтонов контур длины, не превышающий величины В.
Если число вершин графа равно n, то число всех гамильтоновых
контуров, очевидно, не превысит (п-1)!.
Тривиальный алгоритм, основанный на полной переборе состоит в
следующем.
1° УСПЕХ «FALSE»,
2° Выбрать очередной гамильтонов контор γ.
3° Вычислить его длину L(γ) .
4° Если
,
то {УСПЕХ
«ТRUE»; перейти
на 6°}.
5° Если перебор всех гамильтоновых контуров не закончен,
перейти на 2°.
6° Вывод значения переменной УСПЕХ.
Учитывая асимптотическое представление факториала
легко убедиться, что тривиальный алгоритм не является полиномиальным по сложности. Это типичный пример так называемого
переборного алгоритма.
Для того, чтобы построить теорию сложности решения дискретных задач, был предложен недетерминированный оператор «угадывания»
отдельных элементов перебираемых множеств - допустимых решений,
причем считается; что такай оператор, осуществляет выбор сразу всех возможных решений. Такая абстракция соответствует обычному
представлению о распараллеливании алгоритмов.
Если Х - конечное множество допустимых решений некоторой задачи, то недетерминированный оператор CHOOSE(Х) осуществляет
выбор х CHOOSE(Х) одновременно всех хХ, так что последующая
алгоритмическая проверка некоторого свойства (предиката) Р(х) позволяет сделать вывод о его выполнимости или невыполнимости
сразу на всем множестве X. Можно сказать, что если элемент с ин-тересующими нас свойствами во множестве Х имеется, то недетерми-нированный оператор обязательно «угадает» этот элемент. Типичный
пример недетерминированного алгоритма имеет вид:
х СНОOSЕ (Х); {недетерминированный выбор}
if Р(х) then write («УСПЕХ») {проверка свойства}
еlse writе («НЕУДАЧА»);
Такие алгоритмы содержат два основных элемента;
недетерминированный выбор и проверку свойства. Сложность недетерминированного алгоритма определяется только сложностью проверки свойства Р(х), сложность же перебора элиминируется недетерминированным оператором выбора, что и является трудно воспринимаемой абстракцией, но важнейшим для теории сложности
обстоятельством.
Обычно моделью недетерминированной алгоритмической системы является недетерминированная машина Тьюринга (НДТМ) [1]. Однако
мы будем использовать модель, более близкую к реальному ходу
вычислений на современном однопроцессорном компьютере:
алгоритмический язык, к которому добавлен недетерминированный
оператор СНOOSЕ ( ). Такой язык будем называть N-ALGOL и считать его расширением некоторого алгоритмического языка . высокого уровня, условно названного ALGOL. Программу на языке N-ALGOL будем называть N-программой. Выполнение недетерминированного оператора СНООSЕ ( ) считается одним элементарным шагом.
Определение 3.1. Классом NР называется множество всех задач, для которых существует программа на языке N-ALGOL с полиномиальной временной сложностью, вычисляющая правильный ответ для любых допустимых вариантов исходных данных.
Поскольку язык N-ALGOL является расширением языка ALGOL, то любая программа является N-программой, и выполняется включение
р nр. Справедливость равенства Р = nр сомнительна, поскольку оно повлекло бы существование полиномиальных алгоритмов для всех переборных задач. Поэтому соотношение Р NР, подтверждаемое опытом математиков - вычислителей и специалистов в области теории алгоритмов и математической логики, считается гипотезой.
