- •Ф.К. Алиев, и.А. Юров
- •Введение
- •Основные способы задания двоичных функций
- •1.1. Табличный способ задания
- •1.2. Геометрический способ задания
- •1.3. Задание двоичных функций формулами
- •Основные способы задания двоичных функций (продолжение)
- •2.1. Нормальные формы двоичных функций
- •2.3. Теорема о разложении в ряд Фурье
- •2.2. Многочлен Жегалкина и действительный многочлен двоичной функции
- •Полнота и замкнутость. Критерий полноты системы. Функционально полные системы. Замкнутые классы булевых функций
- •3.1. Полнота и замкнутость. Функционально полные системы
- •3.2. Замкнутые классы булевых функций
- •3.3. Критерий полноты системы булевых функций
- •4.1. Псевдобулевы функции
- •4.2. Функции k-значной логики
- •5.1 Минимизация двоичных функции
- •5.2. Геометрическая интерпретация минимизации днф
- •6.1. Метод Квайна — Мак-Класки нахождения сокращённой днф двоичной функции
- •6.2. Метод нахождения тупиковых днф
- •6.3. Метод Петрика нахождения тупиковых днф
- •Алгебраические системы
- •7.1. Алгебраические системы. Булевы алгебры
- •7.2. Изоморфизм алгебраических систем
- •Алгебры высказываний. Предикаты и операции над ними
- •8.1. Основные логические операции и их свойства
- •8.2. Предикаты и операции над ними
- •Исчисление предикатов
- •9.1. Общее понятие о логическом исчислении
- •9.2. Формулы алгебры предикатов
- •9.3. Равносильность формул. Основные отношения равносильности
- •9.4. Использование равносильностей для упрощения формул
- •9.5. Построение исчисления предикатов
- •9.6. Выводимость и доказуемость формул
- •9.7. Семантика исчисления предикатов
- •Понятие о теории моделей
- •Элементы теории алгоритмов
- •11.1. Основные требования к алгоритмам
- •11.2. Машина Тьюринга и функции, вычислимые по Тьюрингу
- •11.3. Машины произвольного доступа и вычислимые функции
- •Частично рекурсивные функции и их вычислимость
- •Вычислимость суперпозиции
- •Вычислимость рекурсии
- •Вычислимость минимизации
- •Нумерация наборов чисел и слов
- •Нормальные алгоритмы
- •Нумерация алгоритмов
- •1. Нумерация машин Тьюринга
- •2. Нумерация мпд-программ
- •Универсальные функции
- •Алгоритмически неразрешимые проблемы
- •16.1. Алгоритмически неразрешимые проблемы
- •16.2. Примечательные алгоритмически неразрешимые проблемы
- •Характеристики сложности вычислений
- •Характеристика сложности вычислительных задач
- •18.1. Классы сложности p и np и их взаимосвязь
- •18.3. Основные np-полные задачи. Сильная np-полнота
- •Список Литературы
18.3. Основные np-полные задачи. Сильная np-полнота
В данном разделе устанавливается NP-полнота некоторых известных в различных приложениях задач. Предпочтение отдается графическим задачам как наиболее наглядным. Доказательство получается преобразованием в рассматриваемую задачу другой задачи, NP-полнота которой установлена. Для задач с целочисленными параметрами вводится важное понятие – сильная NP-полнота.
1. Пусть f(x1, …, xn) — формула от булевых переменных x1, …, xn в конъюнктивной нормальной форме, где каждая дизъюнкция имеет не более, чем три вхождения переменных. Задача проверки выполнимости таких формул называется задачей 3-выполнимости (идентификатор: 3ВЫП).
Утверждение 18.6. Задача 3ВЫП является NP-полной.
Доказательство.
Достаточно доказать, что ВЫП3ВЫП.
Пусть F = D1D2 … Dm —
индивидуальная задача выполнимость от
переменных x1, …, xn.
Пусть Di = z1 z2 … zk
и k > 3,
.
Положим
![]()
![]()
где y1, …, yk-3 — новые переменные. Покажем, что:
Di
выполнено тогда и только тогда, когда
существует значение y1, …, yk-3
такое, что
выполнено;
Di
не выполнено тогда и только тогда, когда
для любых значений y1, …, yk-3
не выполнено.
Действительно:
Di = 0
z1 z2 … zk = 0
![]()
;
Di = 1
z1 z2 … zk = 1
.
Укажем
значения переменных y1, …, yk-3,
выполняющие
(табл.18.3).
Таблица 18.3
|
|
y1 |
y2 |
y3 |
… |
yk-3 |
|
z1 = 1 |
0 |
0 |
0 |
… |
0 |
|
z2 = 1 |
0 |
0 |
0 |
… |
0 |
|
z3 = 1 |
1 |
0 |
0 |
… |
0 |
|
z4 = 1 |
1 |
1 |
0 |
… |
0 |
|
… |
… |
… |
… |
… |
… |
|
zk = 1 |
1 |
1 |
1 |
… |
1 |
Проделаем
теперь процедуру замены каждой дизъюнкции
Di
на
для каждого
с условием k > 3.
Получим задачу 3-выполнимости за
полиномиальное время. По доказанному
имеем ВЫП3ВЫП,
что и требовалось доказать.
Замечание. Можно доказать, что задача 2-выполнимости лежит в классе P.
2. Рассмотрим графическую задачу (идентификатор: КЛИКА): по произвольному графу G(V, E) и числу k узнать, имеется ли в графе G полный (граф называется полным, если любые две вершины соединены ребром) подграф с k вершинами (клика).
Утверждение 18.7. Задача КЛИКА является NP-полной.
Доказательство. Ясно, что КЛИКА NP, так как словом-отгадкой для задачи служит список вершин, составляющих клику и детерминированный алгоритм за полиномиальное время проверяет наличие ребра между каждой парой вершин. Покажем, что ВЫП КЛИКА.
Пусть
F = D1D2…Dm —
произвольная индивидуальная задача
ВЫП. Строим соответствующий граф GF
следующим образом. Каждому вхождению
переменной в F
сопоставим вершину графа и присвоим ей
обозначение (x, i),
где x —
вхождение переменного ( {0, 1}),
i —
номер соответствующей дизъюнкции.
Вершины (x, i)
и (y, j)
соединим ребром в том и только в том
случае, когда i j
и x
не есть отрицание y
(т.е. x y
или, если x = y,
то = ).
Допустим, что F
выполнима и пусть
—
соответствующий выполняющий набор. В
каждом сомножителеF
есть вхождение переменной, обратившее
его в 1. Выберем по одному такому вхождению
из каждой дизъюнкции. Рассмотрим
соответствующее множество К
вершин графа GF
и покажем, что любые две такие вершины
соединены ребром. Действительно, для
вершин (x, i)
и (y, j)
нет соединяющего ребра лишь в случае
i = j,
либо
.
Ноx y,
так как вхождения переменных взяты из
разных дизъюнкций. Если
,
то одно и то же значение переменного х
не может одновременно обратить в 1x
и y.
Значит, из выполнимости F
следует наличие клики размера k
в GF.
Обратно,
пусть GF
содержит клику размера k.
Пусть это набор вершин
.
Покажем, что формулаF
выполнима. Положим
,
и тогда
.
Значения остальных переменных положим
произвольно. Противоречия в выборе
значений переменных нет, так как если
и
соединены ребром, то = .
По построению GF вершинам соответствуют вхождения переменных из разных дизъюнкций и так как число вершин равно k, то каждая дизъюнкция имеет вхождение переменного, обращающего в 1 при данных значениях переменных, значит и F обращается в 1. Построение GF проводится за полиномиальное время и, следовательно, ВЫП КЛИКА, что и требовалось доказать.
3. Говорят,
что некоторое множество вершин
графаG(V, E)
образует вершинное покрытие графа, если
для любого ребра e E
найдется инцидентная ему вершина v V1
этого множества. Задача о вершинном
покрытии (идентификатор: ВП) состоит в
том, чтобы по произвольному графу G(V, E)
и числу К
узнать, имеет ли граф вершинное покрытие
мощности k.
Утверждение 18.8. Задача ВП является NP-полной.
Доказательство. Ясно, что ВПNP, так как словом-догадкой является список вершин соответствующего вершинного покрытия и правильность ответа проверяется за полиномиальное время. Покажем, что КЛИКА ВП.
Для графа G(V, E) строим граф G’, являющийся дополнением G до полного графа (т.е. G’ = (V, E’)), где e E’ e E). Покажем, что А есть полный подграф в G дополнение А’ = V\A есть ВП в G’.
Действительно,
пусть полный подграф с множеством вершин
А
лежит в G.
Тогда, если бы для ребра
графаG’
выполнялось бы
и
,
то должно быть, что ребра
нет вG.
Значит А’ = V\A —
вершинное покрытие для G’.
Обратно, если А’ образует вершинное покрытие графа G’, то всякое ребро, оба конца которого находятся в А, не может принадлежать G’ и содержится в G, т.е. в G имеется полный подграф с множеством вершин А.
Итак, задача о к-вершинном полном подграфе сводится к задаче о вершинном покрытии мощности k’ = n – k, n = |V|. Доказательство закончено.
Говорят,
что множество вершин
графаG(V, E)
независимо, если никакие две вершины
из V1
не связяны ребром. Задача о независимом
множестве вершин (идентификатор: НВ)
заключается в том, чтобы для произвольного
графа G(V, E)
и целого числа k
выяснить, существует ли в G
независимое множество из к
вершин.
Утверждение 18.9. Задача НВ является NP-полной.
Доказательство аналогично предыдущему.
Приведем теперь без доказательства некоторые известные NP-полные проблемы. За доказательствами можно обратиться к книге: Гэри М., Джонсон Д. Вычислительные машины и труднорешаемые задачи. М., 1983.
5. Задача ГАМИЛЬТОНОВ ЦИКЛ (идентификатор: ГЦ).
Для
произвольного графа G(V, E)
требуется узнать, существует ли
перестановка вершин
такая, что выполнено:
![]()
6. Задача ЦЕЛОЧИСЛЕННЫЙ РЮКЗАК (идентификатор: ЦР).
Для
произвольных натуральных чисел
иk
требуется узнать, существует ли набор
целых чисел
,
что выполнено
.
Вариантом данной задачи является
(0,1)-рюкзак, в которой требуется установить
существование (0,1)-чисел
с условием
.
7. Множество
ребер, разрезающих циклы. Для произвольного
графа G(V, E)
и целого числа к выяснить, существует
ли множество
,
такое, что
и каждый цикл графаG(V, E)
содержит ребро из
.
8. Множество вершин, разрезающих циклы. То же, но только теперь ищется подмножество множества вершин.
9. Изоморфизм подграфу. Для заданных двух графов G(V1, E1) и H(V2, E2) выяснить, содержит ли граф G(V, E) подграф, изоморфный Н.
10. Проблема разрешимости диофантовых уравнений (в стандартном двоичном кодировании данных) вида
.
В настоящее время известно большое число NP-полных задач из разных областей дискретной математики (несколько тысяч). Мы ограничимся приведением результата, полученного Шеффером Т.И. (1978), дающего бесконечную серию NP-полных проблем.
Пусть
—
любое конечное множество логических
отношений. Логическое отношение
определяется как некоторое подмножество
из {0, 1}k
для некоторого целого k 1,
при этом k
называется рангом отношения. Определим
S-формулу
как произвольную конъюнкцию скобок,
каждая вида
,
где
—
переменные, число которых соответствует
рангу
.
ПроблемаS-выполнимости —
это проблема разрешения, является ли
данная S-формула
выполнимой.
Например, пусть R(x, y, z) — 3-местное логическое отношение с таблицей истинности {(1, 0, 0), (0, 1, 0), (0, 0, 1)}. Тогда формула R(x, y, z) R(x, y, u) R(u, u, y) выполнима и (x, y, z, u) = (0, 1, 0, 0) — ее выполняющий набор.
Результат Шеффера состоит в том, что проблема S-выполнимости полиномиально разрешима, если множество S удовлетворяет по крайней мере одному из приводимых ниже условий (в противном случае проблема NP-полна):
1) каждое
отношение
изS
0-выполнимо, т.е. (0, …, 0)
;
2) каждое
отношение
изS
1-выполнимо, т.е. (1, …, 1)
;
3) каждое
отношение
изS
слабо положительно, т.е.
логически эквивалентно формуле КНФ,
имеющей самое большее одно переменное
с отрицанием в каждой дизъюнкции;
4) каждое
отношение
изS
слабо отрицательно, т.е.
логически эквивалентно формуле КНФ,
имеющей самое большее одно переменное
без отрицания в каждой дизъюнкции;
5) Каждое
отношение
изS
мультиафинно, т.е.
логически эквивалентно формуле,
являющейся конъюнкцией линейных форм
над полемGF(2);
6) каждое
отношение
изS
биюнктивно, т.е.
логически эквивалентно формуле КНФ,
имеющей самое большее вхождения двух
переменных в каждой конъюнкции.
Установим теперь NP-трудность некоторых задач, уже встречавшихся в курсе математической логики. Рассмотрим следующие задачи о булевых функциях.
Задача
1. РАВНОВЕРОЯТНОСТЬ
БУЛЕВОЙ ФУНКЦИИ. Для данной булевой
функции
,
заданной в КНФ, узнать, является ли она
равновероятной (т.е. верно ли, что ее вес
равен
).
Задача
2. ЛИНЕЙНОСТЬ
БУЛЕВОЙ ФУНКЦИИ. Для данной булевой
функции
,
заданной в КНФ, узнать, является ли она
линейной.
Задача
3. СУЩЕСТВЕННОСТЬ
ПЕРЕМЕННОГО. Для данных булевой функции
в КНФ и целого числак
узнать, является ли переменное xk
существенным для f.
Задача
4. ФУНКЦИОНАЛЬНАЯ
ПОЛНОТА. Для данной булевой функции
в КНФ выяснить, образует лиf
функционально полную систему (является
ли f
шефферовой).
Утверждение 18.10. Задачи (1 – 4) являются NP-трудными.
Доказательство.
Задача
1. Пусть
—
произвольная индивидуальная задача
ВЫП, где
=D1…Dm,
Di —
дизъюнкции. Определим функцию
=D1…Dm y,
где y —
новое переменное. Имеем
и, значит, КНФ для функцииf*
строится по функции f
за полиномиальное время. Легко видеть,
что
.
Значит,f*
равновероятна тогда и только тогда,
когда f
не выполнима. Ясно, что условие «задача
1 P»
влечет за собой ВЫП P,
что означает задача 1 NPH.
Задача
2. Пусть
—
произвольная индивидуальная задача
ВЫП. Определим функцию
,
где y1, y2 — новые переменные. Ясно, что КНФ для функции f* строится по f за полиномиальное время. Легко видеть, что f* линейна тогда и только тогда, когда f не выполнима и условие «задача 2 P» влечет за собой ВЫП P, что означает задача 2 NPH.
Задача
3. Пусть
—
произвольная индивидуальная задача
ВЫП. Образуем функцию
,
гдеy —
новое переменное. Ясно, что y
существенно для f*
тогда и только тогда, когда f —
выполнима. Следовательно, «задача 3 P»
влечет за собой ВЫП P,
что означает задача 3 NP.
Задача
4. Пусть
—
произвольная индивидуальная задача
ВЫП. Образуем функцию
.
Ясно,
что КНФ для f*
строится по f
за полиномиальное время. Функция f*
образует функционально полную систему
тогда и только тогда, когда f
выполнима. Действительно, если f
не выполнима, то
и f*
не является функционально полной. Если
f
выполнима, то пусть
- выполняющий набор. Тогда имеем
,
,
откуда следует не самодвойственность и не линейность функции f*. Очевидно, что f* не сохраняет нуль, не сохраняет единицу и не монотонна. Значит, функция f* удовлетворяет критерию Шеффера функциональной полноты. Следовательно, условие «задача 4 P» влечет за собой ВЫП P, что означает задача 4 NPН, что и требовалось доказать.
Замечание. Легко убедиться, что отрицание задачи 2, задачи 3 лежат в классе NP, и поэтому они NP-полны. Неизвестно, верно ли это для задач 1 и 4. Очевидно, что при табличном задании булевых функций рассмотренные задачи имеют полиномиальную сложность.
Разберем
еще одно важное понятие, относящееся к
обсуждаемому кругу вопросов. Рассмотрим
задачу ЦЕЛОЧИСЛЕННЫЙ РЮКЗАК, которая,
как отмечалось выше, является NP-полной.
Пусть c1, …, cn, w —
натуральные числа и спрашивается,
существуют ли такие целые x1, …, xn 0,
что выполнено
.
Приведем один алгоритм решения данной
задачи. Для индивидуальной задачи
ЦР(c1, …, cn, w)
построим ориентированный граф
G(c1, …, cn, w) = (V, E),
где V = {0, 1, …, w},
E = {(m, k),
0 m < k
w
и k – m = cj
для некоторого j n}.
Значит, граф G
имеет w + 1
вершину и O(nw)
дуг.
Утверждение 18.11. В графе G(c1, …, cn, w) имеется путь из 0 в w тогда и только тогда, когда индивидуальная задача ЦР(c1, …, cn, w) имеет решение.
Доказательство.
Пусть (0 = i0,
i1, …, im = w) —
нужный путь в графе G.
Рассмотрим набор чисел
(s1, …, sm) = (i1 – i0, …, im – im-1).
Все эти числа содержатся среди чисел
{c1, …, cn}
согласно определению графа G.
Кроме того, имеем
.
Отсюда следует, что уравнение
разрешимо в неотрицательных целых
числах, причем xj
равно числу появлений cj
в последовательности (s1, …, sm).
Обратно,
если
для неотрицательных целых чисел
x1, …, xn,
то можно восстановить некоторый путь
из 0 в w
в графе G,
если положить (s1, …, sm) = (
)
и путь из 0 в w
имеет вид (0 = i0,
i1, …,
im = w),
где i1 = s1,
i2 = s1 + s2, …,
im = s1 + … + sm.
Доказательство завершено.
Утверждение 18.12. Любая индивидуальная задача ЦР может быть решена за О(nw) действий.
Доказательство. По данным c1, …, cn, w строим граф G за О(nw) действий. Затем за О(nw) действий проверяем существует ли путь из 0 в w, используя способ пометок: вершину 0 помечаем 0, вершины, достижимые из 0 за 1 шаг, помечаем 1 и т.д. Если w получает пометку, то задача разрешима, если нет, то неразрешима. Доказательство завершено.
Приведенный результат показывает, что NP-полная задача ЦЕЛОЧИСЛЕННЫЙ РЮКЗАК решается с помощью алгоритма с временной сложностью О(nw) — полиномиального и, следовательно, доказано, что P = NP и можно считать ненужным предыдущее и последующее обсуждение теории NP-полноты. Дело в том, что оценка О(nw) не является полиномиальной функцией от длины входа, так как целые числа в экономном кодировании должны задаваться в двоичной системе счисления. В то же время приведенный результат важен, так как он показывает, что NP-полные задачи имеют разную «сложность».
Для задач с числовыми параметрами введем следующие определения. Пусть I — индивидуальная вычислительная задача, т.е. с числовыми параметрами. Обозначим через num(I) — наибольшее целое число, появляющееся в I.
Определение 18.13. Пусть А — вычислительная задача и f:N N — числовая функция. Обозначим через Af подзадачу задачи А, в которой берутся индивидуальные задачи I, для которых выполнено num(I) f(|I|). Говорят, что задача А сильно NP-полна, если для некоторого полинома p(n) задача Ap является NP-полной.
Замечание. Можно показать, что задачи КЛИКА, ГАМИЛЬТОНОВ ЦИКЛ являются сильно NP-полными, а задачи (0,1)-РЮКЗАК и ЦЕЛОЧИСЛЕННЫЙ РЮКЗАК не являются таковыми.
Определение 18.14. Алгоритм АЛГ для задачи А называют псевдополиномиальным, если он решает любую индивидуальную задачу I A за время, ограниченное полиномом (двух переменных) от |I| и num(I). Значит, алгоритм со сложностью О(nw) для задачи ЦЕЛОЧИСЛЕННЫЙ РЮКЗАК является псевдополиномиальным (ясно, что для индивидуальной задачи I ЦР num(I) = w).
Отметим, что сильная NP-полнота задачи делает маловероятным существование псевдополиномиального алгоритма точно также, как NP-полнота задачи делает маловероятным существование полиномиального алгоритма.
Утверждение 18.15. Если P NP, то ни для одной сильно NP-полной задачи не существует псевдополиномиального алгоритма.
Доказательство. Пусть А — сильно NP-полная задача. Значит, для некоторого полинома p(n) задача Аp является NP-полной. Далее, пусть для А существует псевдополиномиальный алгоритм АЛГ, который решает любую индивидуальную задачу I A за время q(|I|, num(I)) для некоторого полинома q от двух переменных. Тогда очевидно, что алгоритм АЛГ решает NP-полную задачу Аp за время q(n, p(n)) — что является полиномиальной оценкой. Получено противоречие при P NP, что и требовалось доказать.
