- •Конспекты лекций по дисциплине Теория сложности вычислений
- •6.080200 Прикладная математика
- •Симферополь, 2004
- •Тема 0: Введение
- •Тема 1: Модели вычислений
- •Тема 4. Класс р и неразрешимые полиномиальные задачи
- •Недетерминированные алгоритмы и класс np
- •Теорема 4.1 [1].
- •Тема 5. Клас np
- •Теорема_5.1. (Сoоk s.A., 1971). Задача выполнимости кнф является nр- полной.
- •Начальная информация
- •Здесь - функция смены состояний нмт, - функция, определяющая записываемый на ленту символ, - функция, определяющая движение головки машины, . Введем вспомогательную функцию –
- •Тема 8. Матроиды и greedy алгоритмы
- •Значение функции (е) будем называть весом элемента е е. Задача 8.3 может быть переформулирована так: найти допустимое подмножество s j с наибольшим суммарным весом.
Недетерминированные алгоритмы и класс np
Чтобы ввести сложное и являющееся примером исключительной абстракции понятие недетерминированного алгоритма, рассмотрим одну простую схему решения задачи коммивояжера в следующей постановке. Существует ли в данном конечном графе с заданными длинами дуг гамильтонов контур длины, не превышающий величины В? Напомним, что гамильтоновым контуром называют цикл в графе, проходящий каждую вершину ровно один раз
Если число вершин графа равно n, то число всех гамильтоновых контуров, очевидно, не превысит (п-1)!.
Тривиальный алгоритм, основанный на полном переборе, состоит в следующем.
1° УСПЕХ := «FALSE»,
2° Выбрать очередной гамильтонов контор γ.
3° Вычислить его длину L(γ) .
4° Если
,
то {УСПЕХ
:= «ТRUE»;
перейти на 6°}.
5° Если перебор всех гамильтоновых контуров не закончен,
перейти на 2°.
6° Вывод значения переменной УСПЕХ.
Учитывая асимптотическое представление факториала
легко убедиться, что тривиальный алгоритм не является полиномиальным по сложности. Это типичный пример так называемого переборного алгоритма.
Для того, чтобы построить теорию сложности решения переборных дискретных задач, был предложен недетерминированный оператор «угадывания» отдельных элементов перебираемых множеств - допустимых решений, причем считается; что такай оператор, осуществляет выбор сразу всех возможных решений. Такая абстракция в какой-то степени соответствует представлению о распараллеливании алгоритмов.
Если Х - конечное множество допустимых решений некоторой задачи, то недетерминированный оператор CHOOSE(Х) осуществляет выбор х:=CHOOSE(Х) одновременно всех хÎХ, так что последующая алгоритмическая проверка некоторого свойства (предиката) Р(х) позволяет сделать вывод о его выполнимости или невыполнимости сразу на всем множестве X. Можно сказать, что если элемент с интересующими нас свойствами во множестве Х имеется, то недетерминированный оператор обязательно «угадает» этот элемент. Типичный пример недетерминированного алгоритма имеет вид:
Х:= СНОOSЕ (Х); // недетерминированный выбор
if Р(х) then write («УСПЕХ») // проверка свойства
еlse writе («НЕУДАЧА»);
Такие алгоритмы содержат два основных элемента: недетерминированный выбор и проверку свойства. Сложность недетерминированного алгоритма определяется только сложностью проверки свойства Р(х), сложность же перебора элиминируется недетерминированным оператором выбора, что и является трудно воспринимаемой абстракцией, но важнейшим для теории сложности обстоятельством.
Обычно моделью недетерминированной алгоритмической системы является недетерминированная машина Тьюринга (НДТМ). Однако мы будем использовать модель, более близкую к реальному ходу вычислений на современном однопроцессорном компьютере: алгоритмический язык, к которому добавлен недетерминированный оператор СНOOSЕ. Такой язык будем называть N-ALGOL и считать его расширением некоторого алгоритмического языка высокого уровня, условно названного ALGOL. Программу на языке N-ALGOL будем называть N-программой. Выполнение недетерминированного оператора СНООSЕ считается одним элементарным шагом.
Определение 4.2. Классом NР называется множество всех задач, для которых существует программа на языке N-ALGOL с полиномиальной временной сложностью, вычисляющая правильный ответ для любых допустимых вариантов исходных данных.
С точки зрения двухэтапности переборного алгоритма «выбор – проверка свойства», сложный переборный процесс выбора нужного элемента при определении класса NР не берется в расчет. От задач класса NР требуется только возможность полиномиальной по сложности проверки свойств. Поэтому класс NР часто называют классом задач с полиномиальной проверкой свойства.
Поскольку язык N-ALGOL является расширением языка ALGOL, то любая программа является N-программой, и выполняется включение рÌ nр. Справедливость равенства Р = nр сомнительна, поскольку оно повлекло бы существование полиномиальных алгоритмов для всех переборных задач. Поэтому соотношение Р¹ NР, подтверждаемое опытом математиков - вычислителей и специалистов в области теории алгоритмов и математической логики, считается гипотезой.
Лекция 2. Основные определения полиномиального сведения
1) Основные определения полиномиального сведения [1,2,3,4,5,6,7,8,9]
Ниже излагаются основы теории сложности, заложенной в работах С. Кука, Р. Карпа, А.А. Левина. Важно обратить внимание на полиномиальное преобразование задач как главный элемент этой теории. Известно, например, что задача о максимальном потоке в сети может быть преобразована в задачу линейного программирования. Подобные преобразования задач иногда оказываются полезными для нахождения решений, и для их осуществления в общем случае приходится производить некоторые вычисления, связанные с перекодированием и начальной информации, и ответа - решения задачи. Применение преобразований исходных задач, например, для их сведения к уже изученным задачам, решение которых известно, давно применяется математиками. Для дальнейшего изложения важно отметить, что нас будут интересовать полиномиальные по сложности алгоритмы сведения задач.
Будем далее рассматривать класс задач вычисления свойств. Задачи этого класса всегда имеют двузначный ответ: «да» или «нет». Например, к такому классу будет относиться задачи: существует ли в заданном конечном графе с указанными длинами ребер гамильтонов контур длины, не превышающей заданную величину, является ли выполнимой (тождественно неравной нулю) заданная формула алгебры логики, является ли данная правильно построенная формула некоторого исчисления теоремой в нем, существует ли решение задачи скалярной целочисленной оптимизации со значением целевой функции не меньшим указанной величины, является ли совместной заданная система линейных неравенств с целочисленными переменными и другие. Видно, что класс задач вычисления свойств достаточно широк.
Определение 4.3. Задачи (вычисления свойств) из множества Z полиномиально сводятся к задачам из множества S (обозначение - Z S ), если существует функция , вычислимая за полиномиальное время и преобразующая любую задачу z Z в задачу (z) = s, s S , так, что задача z и задача s всегда дают совпадающий ответ: либо одновременно – «да», либо одновременно – «нет».
Рис. 4.1. Схема полиномиальной сводимости задачи Z к задаче (z).
Рис. 4. поясняет,
как можно воспользоваться полиномиальной
сводимостью задачи z,
которую нужно решить, к другой задаче
s,
относительно которой известно, что она
легко решаема, например, с полиномиальной
сложностью. Согласно схеме, приведенной
на этом рисунке, два алгоритма должны
быть выполнены последовательно, поэтому
итоговая сложность такого двухэтапного
решения является суммой сложности
преобразования
и сложности
решения задачи
s=(z).
Сумма двух
полиномов является полиномом, поэтому
легко видеть, что если сложность решения
задачи s=(z)
оценивается полиномом
и
сложность преобразования
является
полиномиальной,
то задача z
полиномиально
разрешима.
О
пределение
4.4.
Задача Z*
называется NР
- полной
(универсальной переборной задачей),
если Z*
NР
и для любой задачи Z
NР
имеет место полиномиальная сводимость
Z
Z*.
Множество всех NР- полных задач часто обозначают NPС (Nondeterministic Polynomial Compete). Из определения 4.2. следует, что NPС NP и NP-полные задачи являются наиболее сложными в классе NP : если хотя бы одну NP-полную задачу удалось решить за полиномиальное время, то и все задачи из NP (в силу полиномиальной сводимости Z Z* ) также удалось бы решить за полиномиальное время.
