
- •23. Оценки сложности алгоритма применительно к машинам Тьюринга
- •24. Определение класса задач, разрешимых за полиномиальное время (класс сложности p) в терминологии машины Тьюринга. Класс задач np.
- •25. Недерминированная машина Тьюринга (нт). Взаимосвязь классов р и np.
- •26. Ещё один подход к определению класса np. Примеры недетерминированных алгоритмов. О проблеме p¹np.
- •27. Примеры задач класса np.
- •2. Проблема существования гамильтонова цикла.
- •29. Примеры np-полных задач: задача определения того, содержит ли неориентированный граф полный подграф
- •30. Необычное свойство недетерминированных алгоритмов — различная сложность задачи разрешения и её дополнения. Практическое значение определения принадлежности задачи классу сложности
27. Примеры задач класса np.
Входная строка l, на которой недетерминированный алгоритм дает ответ «да» за полиномиальное время называется догадкой или свидетелем.
1. Проблема выполнимости булевых формул. Напомним, что булевы формулы — это правильные выражения, построенные из булевых переменных р1, р2, … с помощью булевых связок Ù (конъюнкция), Ú (дизъюнкция), Ø (отрицание) и скобок. Проблема выполнимости булевых формул формулируется следующим образом: «По булевой формуле j(р1, р2, …, рn) выяснить, существует ли набор истинностных значений переменных а1,а2, …, аn, для которого j(а1,а2, …, аn)=1». Свидетельством ответа «да, выполнима» служит любой двоичный набор (а1,а2, …, аn), на котором формула выполняется. Его размер n не превосходит длины формулы, то есть ограничен полиномом первой степени от её длины. Такие свидетельства имеются у всех выполнимых формул и только у них. Проверка того, что некоторый двоичный набор длины n свидетельствует о выполнимости формулы, сводится к вычислению её истинностного значения при заданных значениях переменных, что проверяется за полиномиальное время. Значит, данная задача принадлежит классу NP.
2. Проблема существования гамильтонова цикла.
По графу выяснить, существует ли в нем гамильтонов цикл (замкнутый путь по ребрам графа, проходящий через каждую вершину ровно 1 раз). Свидетель здесь – гамильтонов цикл.
Ж
ирным
выделен
гамильтонов цикл
рис. 27.1
3. Задача о клике. Подграф данного графа называется кликой, если он полный, т.е. каждая пара его вершин соединена ребром. Размер клики – это число ее вершин. По графу выяснить, существует ли в нем клика данного размера d. Свидетель здесь – клика.
Жирным выделена
клика размера 4.
рис. 27.2
4. Существование целочисленного решения системы линейных неравенств. Дана система линейных неравенств с целыми коэффициентами. Выяснить, имеет ли она целочисленное решение. Свидетель – решение. Для доказательства принадлежности классу NP нужна полиномиальная оценка на длину свидетеля. Можно показать, что если такая система имеет целочисленные решения, то длина некоторого из них оценивается сверху полиномом от длины системы.
28. NP-трудные и NP-полные задачи
Задача P является NP-трудной, если детерминированный полиномиальный алгоритм ее решения можно использовать для получения детерминированного полиномиального алгоритма для каждой задачи из NP. Другими словами, задача P является NP-трудной, если она по крайней мере так же трудна, как любая задача в NP. NP-трудная задача из NP называется NP-полной; такие задачи не менее трудны, чем любая задача из NP, но не труднее.
Последствия существования детерминированного полиномиального алгоритма для NP-трудной или NP-полной задачи драматические: это означало бы, что классы P и NP совпадают, так что любая задача, которая может быть решена алгоритмом поиска с возвращением, в котором каждый из путей вычисления можно исследовать за полиномиальное время, может быть решена детерминированным алгоритмом, который работает в течение полиномиального времени. Это было бы чересчур удивительным, и поэтому является сильным аргументом против существования детерминированных полиномиальных алгоритмов для любой NP-трудной или NP-полной задачи.
Для доказательства того, что задача является NP-трудной, мы должны доказать, что если для задачи имеется детерминированный полиномиальный алгоритм, то можно использовать этот алгоритм для получения детерминированного полиномиального алгоритма для каждой задачи из NP. Чтобы установить, что задача является NP-полной, мы должны далее доказать, что задача входит в NP.
Идея использования алгоритма решения одной задачи для получения алгоритма решения разных задач является одной из наиболее важных идей, обсуждаемых здесь.
Определение. Задача P1 преобразуется в задачу P2, если любой частный случай задачи P1 можно преобразовать за полиномиальное время в некоторый частный случай задачи P2, так что решение задачи P1 можно получить за полиномиальное время из решения этого частного случая задачи P2.
Это понятие схематически проиллюстрировано на рис 24.
Алгоритм для задачи P2
Преобразование за полиномиальное время
Преобразование за полиномиальное время
Вход Вход Выход Выход
задачи P1 задачи P2 задачи P2 задачи P1
Рис. 28. Схематическая диаграмма, доказывающая преобразуемость P1 в P2.
Ясно, что если P1 преобразовать в P2 и P2Î P, то P1Î P. Это позволяет нам точно определить понятия NP-трудности и NP-полноты.
Определение. Задача является NP-трудной, если каждая задача из NP преобразуется в нее, и задача является NP-полной, если она одновременно является NP-трудной и входит в NP.
Поэтому для доказательства того, что задача является NP-трудной, необходимо доказать, что некоторая NP-трудная задача преобразуется в нее. Трудность состоит в том, чтобы изначально установить, что некоторая частная задача является NP-трудной; затем можно использовать эту задачу для доказательства NP-трудности других задач.