Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дроздов С. Комбинаторные задачи и элементы теории вычислительной сложности.DOC
Скачиваний:
158
Добавлен:
02.05.2014
Размер:
648.7 Кб
Скачать

2.6. Примеры np-полных задач

Задача «3-Выполнимость (задача 3-ВЫП)».Эта задача очень похожа на задачу ВЫП: дана КНФ от переменныхx1, x2, ... xn, но при этом каждая элементарная дизъюнкция содержит ровно три члена. Требуется определить, существует ли набор значений переменных, при котором КНФ равна 1.

Очевидно, что данная задача принадлежит NP, т.к. она представляет собой частный случай задачи ВЫП. Чтобы доказатьNP-полноту, следует показать, что задачу ВЫП можно полиномиально свести к 3-ВЫП.

Поскольку задача ВЫП более общая, чем 3-ВЫП, сведение ВЫП к 3-ВЫП потребует введения дополнительных переменных, чтобы «компенсировать качество количеством».

Вместо того, чтобы излагать доказательство в общем виде, рассмотрим конкретный пример, на котором хорошо видны идеи доказательства.

Пусть дана следующая КНФ от 8 переменных:

G(X) =`x1 & (x1 Ú`x3) & (x2 Ú`x4 Ú`x6) & (x3 Ú`x5 Ú x7 Ú`x8) & (x1 Ú`x2 Ú x3 Ú`x4 Ú x5 Ú x8) .

Дизъюнкции G(X)имеют разную длину. Покажем, как можно преобразовать их в дизъюнкции длины 3, сохранив при этом свойство выполнимости (или невыполнимости) КНФ.

1) x1 Þ (`x1 Ú`y1 Ú`y2) & (`x1 Ú`y1 Ú y2) & (`x1 Ú y1 Ú`y2) & (`x1 Ú y1 Ú y2) .

Введены дополнительные переменные y1иy2, однако выражение в правой части тождественно равноx1, что нетрудно показать путем упрощения выражения.

2) x1 Ú`x3 Þ (x1 Ú`x3 Ú`y3) & (x1 Ú`x3 Ú y3) .

Аналогичный случай.

3) x2 Ú`x4 Ú`x6 .

Не требует преобразования.

4) x3 Ú`x5 Ú x7 Ú`x8 Þ (x3 Ú`x5 Ú`y5) & (y5 Ú x7 Ú`x8) .

Если левая часть истинна, то истинен хотя бы один ее символ. Пусть это, например,`x5. Поскольку при этом в правой части первая дизъюнкция уже истинна, положимy5=1, тогда и вторая дизъюнкция истинна. Если же левая часть ложна, то ложны все ее символы, а тогда в правой части при любом значенииy5одна из дизъюнкций ложна.

5) x1 Ú`x2 Ú x3 Ú`x4 Ú x5 Ú x8 Þ(x1 Ú`x2 Ú`y6) & (y6 Ú x3 Ú`y7) & (y7 Ú`x4 Ú`y8) & (y8 Ú x5 Ú x8) .

Случай, аналогичный предыдущему. Если в левой части хотя бы один символ истинен, то можно подобрать набор значений y6,y7,y8, при котором правая часть также истинна. Если левая часть ложна, то правая ложна при любых наборахy6,y7,y8.

Отметим более четко: в случаях 4 и 5 вовсе не утверждается, что левая часть тождественноравна правой. Дело в другом: если левая часть истинна, и только в этом случае,можно подобратьтакиеyi, что правая часть будет истинна.

Таким образом, если исходная КНФ выполнима, то можно дополнить выполняющий набор xi, подобрав такиеyj, при которых выполнима и преобразованная КНФ. Наоборот, если при любых наборахxiостается хотя бы одна ложная дизъюнкция, то при любом набореyjэта дизъюнкция останется ложной.

Нам удалось свести задачу ВЫП к задаче 3-ВЫП. По-хорошему, следует еще доказать, что такое сведение может быть выполнено за время, ограниченное полиномом от размера задачи. Для простоты изложения ограничимся тем же рассуждением, что при доказательстве теоремы Кука: если удлинение КНФ не очень велико, а процедура преобразования дизъюнкций очень проста, то отчего бы времени быть сверхполиномиальным?

Будем считать, что нам удалось таким образом доказать NP-полноту задачи 3‑ВЫП.

Задача о вершинном покрытии графа (задача ВП). Дан неориентированный графG = (V, E)с множеством вершинVи множеством реберE. Дано натуральное числоK. Вершинным покрытием графа называется подмножество вершинV¢ Í V, такое, что любое ребро графа инцидентно хотя бы одной вершине изV¢. Требуется определить, существует ли вершинное покрытие графаGмощности£ K.

Для доказательства NP-полноты задачи ВП покажем, что к ней сводится задача 3‑ВЫП. Как и раньше, вместо строгого доказательства покажем основные идеи на примере.

Пусть дана следующая КНФ: (x1Ú`x3Ú`x4) & (`x1Úx2Ú`x4). Число переменныхn=4, число дизъюнкцийm=2. Построим графGпо следующим правилам:

1.Для каждой переменнойxiпостроим подграф из двух вершин, соединенных ребром. Пометим вершины символамиxiи`xi.

2.Для каждой дизъюнкцииakпостроим подграф-треугольник, пометив его вершины символамиak1,ak2иak3.

3.Соединим каждую вершину каждого треугольника с вершиной, помеченной соответствующей переменной. Например, поскольку вторым символом первой дизъюнкции является`x3, следует соединить ребром вершиныa12и`x3. Эту группу ребер будем называть соединяющими ребрами.

Результат построения показан на рис.2.1.

Рис.2.1

Выберем значение K = n+2m = 8.

Докажем теперь, что в построенном графе Gимеется вершинное покрытиеV¢мощности не болееKв том и только том случае, если для исходной КНФ имеется выполняющий набор значений переменных.

Рассмотрим сначала, как может выглядеть вершинное покрытие для данного графа. Очевидно, в него должна входить по меньшей мере одна вершина из каждого подграфа xi -`xi, чтобы покрыть ребро этого подграфа. Из каждого треугольного подграфаakв покрытие должны войти по крайней мере две вершины. Итого получается не менееn+2m = Kвершин. Но при этом по условию задачи ВП покрытие должно содержать не болееKвершин. Таким образом, покрытие должно содержать ровноKвершин, по одной из каждого подграфаxi-`xiи по две из подграфовak.

Предположим, такое покрытие существует. При этом должны быть покрыты также все соединяющие ребра. Для каждого akдва таких ребра покрыты двумя вершинамиak, вошедшими в покрытие. Третье же соединяющее ребро должно быть покрыто вершиной из парыxi-`xi. Выпишем набор значений всехxi, соответствующий вершинам, вошедшим в покрытие. По построению графа очевидно, что при этих значениях переменных в каждую дизъюнкцию будет входить, по крайней мере, один истинный символ, т.е. КНФ будет выполнена.

Наоборот, пусть существует набор значений xi, обращающий в истину все дизъюнкции из КНФ. Включим в покрытиеnвершин, помеченных символами этого набора. При этом, поскольку в каждой дизъюнкции присутствует хотя бы один символ из выполняющего набора, для каждого подграфаakбудет покрыто хотя бы одно соединяющее ребро. Включим в покрытие те две вершиныak, которые неинцидентны этому ребру (не лежат на нем). Выполним это для всехak. При этом окажутся покрыты оставшиеся соединяющие ребра и все ребра подграфовak, т.е. будет полностью построено вершинное покрытие изKвершин.

Эквивалентность задачи ВП и задачи 3-ВЫП доказана. Полиномиальность сведения не вызывает сомнений. Полиномиальная проверяемость задачи ВП тоже очевидна. Значит, задача ВП является NP-полной.

Еще несколько примеров NP-полных задач приведем без доказательства. Некоторые из них ранее уже упоминались. Все задачи формулируются здесь как задачи распознавания.

Задача о гамильтоновом цикле. Дан графG = (V, E). Существует ли цикл, ровно один раз проходящий через каждую вершину?

В случае ориентированного графа можно поставить задачу об ориентированном гамильтоновом цикле. Она также NP-полна.

Задача о коммивояжере. Дано числоn, матрица расстояний{aij, 1 £ i, j £ n}и числоK. Существует ли маршрут коммивояжера (т.е. гамильтонов цикл) с длиной, не превышающейK? (К этой задаче легко сводится задача о гамильтоновом цикле).

Задача о самом длинном пути. Дан графG = (V, E), заданы номера двух вершинAиB, а также числоK. Существует ли путь изAвBс длинойне менееK?

Интересно, что для аналогичной задачи о самом коротком пути имеются хорошие полиномиальные алгоритмы.

Задача о разбиении. Даныnпредметов с весамиpi. Можно ли разбить множество предметов на два непересекающихся подмножества с одинаковым весом?

Эту задачу можно свести к задаче о рюкзаке.

Задача о рюкзаке. Имеетсяnнаименований товара, заданы объемы единиц каждого товараbiи их стоимостьci,i = 1…n. Имеется рюкзак объемаB. Можно ли подобрать набор товаров, вмещающийся в рюкзак и имеющий при этом стоимость не менее заданного значенияK?.

Задача о конвейерном расписании. Даныmстанков иnдеталей, каждая из которых должна пройти обработку сначала на станке 1, затем на станке 2 и т.д. Время обработкиi-той детали наj-том станке равноtij. Если станок занят, деталь ожидает его освобождения. Требуемый срок окончания обработки всех деталей равенK. Можно ли так выбрать порядок запуска деталей на обработку, чтобы успеть к этому сроку?

Следует подчеркнуть, что в этой задаче можно и нужно переставлять друг с другом детали, но нельзя изменять порядок станков.

При m = 2этозадача о двух станках, для которой известен очень простой алгоритм точного решения (попробуйте придумать его самостоятельно). Приm = 3получаетсязадача о трех станках, которая ужеNP-полна и очень трудна для решения.

Задача о многопроцессорном расписании. Даныmодинаковых процессоров,nнезависимых задач, время решения каждой задачиtiи требуемый срок окончанияK. Можно ли так распределить задачи по процессорам, чтобы успеть к этому сроку?

Упрощенные шашки n´n. Дана доска размеромn´n, дано расположение дамок (простых шашек нет). Есть ли у белых выигрыш в данной позиции?

Минимизация ДНФ. Задана булева функцияF(X)отnпеременных (например, в форме таблицы истинности или в виде совершенной ДНФ). Дано числоK. Существует ли для этой функции ДНФ, состоящая не более, чем изKконъюнкций?