Методы построения и анализа алгоритмов NP-полные задачи Щукин Георгий Анатольевич Новосибирский Государственный Технический Университет Кафедра параллельных вычислительных технологий 2014 Классы задач Класс P: задачу можно решить за полиномиальное время Класс NP (Nondeterministic Polynomial): решение задачи можно проверить на корректность за полиномиальное время на детерминированной машине. На недетерминированной машине задачу можно решить за полиномиальное время Класс NP-трудных задач (NP-Hard): задача по крайней мере так же сложна, как сложнейшая задача в NP Класс NP-полных задач (NP-Complete): NP + NP-Hard. Задача NP-полная, если каждая NP задача сводится к ней за полиномиальное время P = NP? Пока не доказано Имея алгоритм решения одной NP-полной задачи за полиномиальное время на детерминированной машине, все NP-полные задачи можно будет решить за полиномиальное время Приводимость задач A 2. Приведение за полиномиальное время 3. Может быть решена за полиномиальное время B 1. Известен алгоритм решения с полиномиальной сложностью 1. Для задачи B известен алгоритм решения с полиномиальной сложностью 2. Есть процедура приведения входных данных задачи A к входным данным задачи B, требующая полиномиальное время работы 3. Таким образом, задача A может быть также решена за полиномиальное время Приводимость задач и NP-полнота A 2. Приведение за полиномиальное время 3. Не может быть решена за полиномиальное время B 1. NP-полная задача 1. Известно, что задача B — NP-полная (нет эффективного алгоритма решения) 2. Есть процедура приведения входных данных задачи A к входным данным задачи B, требующая полиномиальное время работы 3. Таким образом, задача A также не имеет эффективного алгоритма решения (за полиномиальное время) Задачи оптимизации и принятия решения Пример задачи оптимизации: поиск кратчайшего пути в графе между парой вершин Пример задачи принятия решения: есть ли путь в графе между парой вершин длиной меньше чем k? Задачи принятия решения (decision problems): ответом может быть только «да» или «нет» Понятие NP-полноты применяется в основном именно к задачам принятия решения SAT Дано: булева формула f ( x 1, x 2, ... , x n ) Задача SAT: проверить, является ли данная булева формула выполнимой: f ( x́1 , x́2 , ... , x́n )=1 SAT и NP-полнота SAT — NP-полная задача Существует алгоритм полиномиальное время проверки решения за Любую другую NP задачу можно свести к SAT за полиномиальное время Время решения: O(2N) На данный момент не найдено алгоритма решения SAT за полиномиальное время Доказательство NP-полноты 3-CNF-SAT: булевая формула — конъюнкция дизъюнкций, в каждой дизъюнкции — ровно 3 литерала (переменная или ее отрицание) Для доказательства NP-полноты задачи нужно показать, что задача SAT или 3-CNF-SAT может быть сведена к этой задаче за полиномиальное время Задача о клике Клика неориентированного графа G = (V,E) — подмножество вершин V', каждая пара вершин из которого соединена ребром из E (полный подграф графа) Задача о клике — найти клику максимального размера (с максимальным числом вершин) Задача о клике: решение MaxClique(Graph G): max_size = 0 max_clique = NULL subgraphs = get_all_subgraphs(G) for subgraph in subgraphs: if is_clique(subgraph): size = size(subgraph) if size > max_size: max_size = size max_clique = subgraph return max_clique Задача о клике: оценка Число всех подграфов графа: O(2V) Проверка на клику: O(V2) Время решения: O(V2*2V) Для задач, решаемых методом полного перебора: временная сложность решения = O(время обработки одного варианта * число вариантов) Решение NP-полных задач Жадные алгоритмы Поиск с возвратом/метод ветвей и границ Эвристические алгоритмы Вышеприведенные методы не гарантируют нахождение оптимального решения задачи Метод ветвей и границ Основная идея: рекурсивное разбиение множества возможных решений на подмножества с отбрасыванием неперспективных подмножеств для сокращения перебора Шаг ветвления: разбить текущее множество решенийкандидатов на подмножества решений Шаг ограничения: вычислить верхние и нижние оценки для подмножеств с помощью оценочной функции; отбросить подмножества с нижними оценками выше чем текущая минимальная верхняя оценка Повторить процедуру для подмножеств или вернуть найденное решение Алгоритм Брона-Кербоша BronKerbosch(Graph G): BronKerbosch({}, G.V, {}) BronKerbosch(R, P, X): Если P и X пусты: R — максимальная клика Для каждой вершины v в P: N(v) — все смежные с v вершины BronKerbosch(R ⋃ {v}, P ⋂ N(v), X ⋂ N(v)) P = P \ {v} X = X ⋃ {v} Время работы: O(3n/3) в худшем случае Задача о независимом множестве Независимое множество неориентированного графа G = (V,E) — подмножество вершин V', никакая пара вершин из которого не соединена ребром из E Задача о независимом множестве — найти независимое множество максимального размера Задача о вершинном покрытии Вершинное покрытие неориентированного графа G = (V,E) — подмножество вершин V', которое «покрывает» все ребра графа: для каждого ребра (u,v) из E вершина u и/или v находится в V' Задача о вершинном покрытии — найти покрытие минимального размера Задача о раскраске графа Задача о раскраске неориентированного графа G = (V,E) — найти минимальное число цветов k, которыми можно раскрасить вершины графа таким образом, чтобы вершины каждого ребра были окрашены в разные цвета Задача о коммивояжере Гамильтонов цикл неориентированного графа G = (V,E) — простой цикл (не проходящий дважды через одну и ту же вершину), содержащий все вершины графа ровно по одному разу Задача о коммивояжере для взвешенного неориентированного графа G=(V,E) — найти гамильтонов цикл с минимальной суммой весов ребер Задача о рюкзаке Дано множество предметов, для каждого предмета известен вес/объем и стоимость. Дан рюкзак с известной максимальной вместимостью по весу/объему Задача: найти подмножество предметов с максимальной суммарной стоимостью, которое может поместиться в рюкзак Полезная литература Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К.: Алгоритмы: Построение и анализ, 2-е издание: Глава 34, NP-полнота Ахо А., Хопкрофт Д., Ульман Д.: Структуры данных и алгоритмы: Глава 10, Методы разработки алгоритмов Гери М., Джонсон Д.: Вычислительные машины и труднорешаемые задачи