
- •Герман олег витольдович алгоритмы и алгоритмическая сложность
- •Содержание
- •Лекция 1. Введение в теорию алгоритмов.
- •Лекция 2. Машины тьюринга
- •Лекция 3. Распознавание языков машинами тьюринга
- •Лекция 4. Рекурсивные множества и функции
- •Лекция 5. Алгоритмически неразрешимые проблемы
- •Лекция 10. Инфологическая сложность задач
- •Количество информации, содержащейся в системе дизъюнктов
- •Лекция 11. Постулаты теории инфологической сложности
- •Лекция 12. Обоснование несуществования эффективного алгоритма в классе задач распознавания свойств Инфы
- •Литература
- •Лекция 16. Метод групповых резолюций
- •Лекция 17. Обзорная
- •Можно ли свести изучение множества решений полиномиального уравнения к изучению более простых объектов.
- •Инварианты и гипотеза Ходжа
Лекция 5. Алгоритмически неразрешимые проблемы
Рассмотрим проблему алгоритмической разрешимости (неразрешимости) на некоторых примерах.
Пример 1. Алгоритмическая неразрешимость проблемы самораспознавания.
Набор
правил каждой машины Тьюринга можно
представить соответствующим геделевским
номером. Обозначим Мy
- набор правил машины Тьюринга с номером
у.
Рассмотрим язык L={yi
| машина M
отклоняет слово yi
}. Таким образом в язык L
войдут номера тех и только тех машин
Тьюринга, которые отклоняют свои номера.
Спросим, можно ли распознать этот язык
? Ответ отрицательный. В самом деле, если
бы такая машина была, то она либо приняла
бы свой собственный номер, либо отклонила.
Оба эти варианта невозможны в силу
определения языка L.
Любопытно заметить, что данная проблема имеет содержательный аналог в лице проблемы о деревенском брадобрее. Последняя формулируется так. В одном селе брадобрей бреет тех и только тех людей, которые не бреются сами. Спрашивается, бреет ли он самого себя?
Ответ не может быть ни положительным, ни отрицательным. Значит, такого брадобрея не существует (брадобрей играет роль машины для распознавания языка L.)
Пример 2. Проблема самоприменимости может быть проиллюстрирована также на следующей задаче.
Каждый, кто в состоянии пройти через лабиринт, называется проводником. В любой момент времени в лабиринте может быть не более двух проводников. Любой проводник Z называется сертифицированным, если и только если он имеет сертификат, который гарантирует, что Z является проводником.
Предположим, некоторый X (и все ему подобные) может пройти через лабиринт, используя любого сертифицированного проводника Y и, по крайней мере, всегда один такой Y отыщется и Y не может отказать X.
Следовательно, Х всегда в состоянии пройти через лабиринт и должен получить сертификат по формальным признакам. Однако, если Х получит сертификат, то при использовании Х-ом другого такого Х, он может не выбраться из лабиринта, поскольку сам по себе Х может не найти путь.
Следовательно, Х нельзя сертифицировать, хотя Х способен пройти через лабиринт.
Рассмотрим теперь машину Тьюринга, моделирующую другие машины Тьюринга, которые являются доказательно финитными на произвольном входе. Чтобы смоделировать другую машину достаточно знать ее правила. Такую машину назовем универсальной и обозначим Mun. На примере о проводнике мы видим, что нельзя доказать, что Mun является финитной машиной, т.е. останавливается на любом входе. Но нельзя доказать, что Mun является не финитной (зацикливается) на каком-нибудь входе, поскольку она моделирует только такие машины, которые сами являются доказательно финитными (читай, сертифицированными пловцами). Следовательно, для Mun нельзя ни доказать, что она финитна, ни опровергнуть это. А по сему, если бы был способ узнать, останавливается ли Mun на любом входе или нет, то мы бы установили финитность или не финитность Mun вопреки недоказуемости этого факта.
Мы получили следующий результат.
Нельзя доказательно построить алгоритм, который устанавливал бы финитность или не финитность других машин Тьюринга на произвольном входе. Этому результату можно придать и формальный вид.
Обозначим через
перечисление всех областей сходимости
машин Тьюринга с номерамиy1,
y2,…,
yk,
….. соответственно.
Сформулируем
проблему: можно ли для любого числа x
выяснить, x?
Если бы такой алгоритм W был, то у него
был бы некоторый геделев номер, скажем.
Спросим S
?
Если
да, тоW
должен принять
по определению , что невозможно. Если
нет, т.е. S,
то W
сходится на ,
а это значит, по условию, что S
- снова противоречие.
Используя неразрешимость проблемы остановки, покажем, что енельзя построить алгоритм для отыскания корней произвольной вычислимой функции.
Нам потребуется следующий простой результат.
УТВЕРЖДЕНИЕ. Ели функция f(x) вычислима, то вычислима и обратная ей функция.
Доказательство. Пусть My - правила машины Тьюринга, которая вычисляет fy(x).
Возьмем какое-нибудь одно из ее правил, например,
Qi Qj L
Читаем: если машина находится в состоянии Qi и читает символ , то она переходит в состояние Qj, записывает вместо символ и сдвигает ленту влево.
Перепишем это правило 'в обратную сторону"
Qj Qi R
Это правило показывает, как работает машина Тьюринга, вычисляющая обратную функцию для данной вычислимой функции. Таким же образом прямо показывается, что любое правило машины Тьюринга можно заменить "обратным", что доказывает УТВЕРЖДЕНИЕ.
Рассмотрим уравнение fy(x) = с, где c – положительное целое число, например
2*x=4. Здесь fy(x) =2*x. Обратная функция есть x=0.5*y. Найти корень уравнения 2*x=4 это то же самое, что ответить на вопрос: останавливается ли на входе y=4 машина, вычисляющая обратную функцию. Таким образом, проблема отыскания корня произвольной вычислимой функции на произвольном входе равносильна проблеме останова, а последняя алгоритмически не разрешима.
В заключение обратимся к знаменитому результату К.Геделя.
Теорема К. Геделя о неполноте формальных систем, содержащих арифметику целых чисел. Существуют истинные недоказуемые формулы.
Общая идея доказательства. Пусть формула (x,y) истинна, если y есть доказательство формулы с номером x. Недоказуемость формулы (x,y) равносильна формуле y((x,y)). По правилам логики последняя формула эквивалентна некоторой формуле (x), в которой y уже не присутствует. Формула (x) утверждает недоказуемость формулы с номером x. Пусть - номер формулы (x). Тогда () утверждает собственную недоказуемость. Формула () не может быть ложной, поскольку ложные формулы недоказуемы в непротиворечивых системах. Следовательно, она истинна и не доказуема.
ЛЕКЦИЯ 6. ИСПОЛЬЗОВАНИЕ МАШИН ТЬЮРИНГА ДЛЯ ОБОСНОВАНИЯ УНИВЕРСАЛЬНОСТИ ЯЗЫКА ПРОГРАММИРОВАНИЯ.
Первый язык программирования создала соратница Ч. Бэббеджа Ада Ловлейс (дочь великого английского поэта Байрона). В языке А. Ловлейс были три оператора:
присвоить (=)
проверить условие (Если … То …)
перейти (goto …)
Наша задача состоит в том, чтобы показать, что с помощью этих операторов можно запрограммировать любой алгоритм (любую вычислимую функцию). Для этого надо просто показать, как реализовать программно правила машины Тьюринга.
Рассмотрим правило
Qj Qi R.
Его программная реализация такова:
again:
прочитать_символ(X);
Если (X=) & (Состояние=Qj) То
{
Cостояние= Qi
записать_символ ()
перейти_к_следующей_ячейке
goto again
}
Else
//Делать обработку других правил
В данном примере предполагается, что команды прочитать_символ, записать_символ, перейти_к_следующей_ячейке понятны вычислительной машине. Первые две - прочитать_символ, записать_символ - это команды чтения/записи. Проблема состоит в том, что лента машины Тьюринга предполагается бесконечной, а память ЭВМ конечна (хотя и очень велика). Таким образом, современные машины моделируют машину Тьюринга с конечной лентой, что, разумеется, делает возможности ЭВМ даже меньшими, чем возможности машин Тьюринга, несмотря на всю простоту последних ! Команда перейти_к_следующей_ячейке соответствует увеличению счетчика адреса команд и реализуется в современных ЭВМ аппаратно.
Ниже приведен код на языке Паскаль для реализации машины Тьюринга (программа взята с бесплатного сайта рефератов). Входное слово и система команд машины записываются на диске c: в файле turing.txt. Сначала идет строка с указанием длины входного слова, затем (с новой строки) сама входная строка, затем (с новой строки) число команд машины Тьюринга и затем (с новой строки) – команды машины Тьюринга (каждая команда на отдельной строке). Пример команды:
2a3br
(читаем: если машина находится в состоянии 2 и читает символ a, то она переходитв состояние b , пишет символ b и двигает ленту вправо).
program turing;
uses crt;
var MT: array [0..300] of string [5]; {количество команд, состояния должны обозначаться одной буквой или цифрой}
{0 - начальное состояние, f - конечное состояние
MT[i][1] – состояние машины перед обработкой
MT[i][2] – старый (считанный) символ
MT[i][3] - новое состояние
MT[i][4] - новый символ
MT[i][5] - направление обработки ('r' - Right, 'l' - Left)}
inpstr: array [0..255] of char; {обрабатываемая запись на ленте}
idx: integer; {позиция текущего символа в обрабатываемой записи}
Lenrec: integer; {длина входной записи (считывается из входного файла)}
commandNumber: integer; {количество команд машины Тьюринга}
fil: text;
Symbol, State, dir : char;
i: integer;
begin
idx:=3;
Assign(fil,'C:\turing.txt');
Reset(fil);
Readln(fil,Lenrec); //читаем длину входной записи
for i:=0 to Lenrec-1 do
Read(fil, inpstr[i]); //читаем саму запись
Readln(fil);
Readln(fil,commandNumber); //читаем число команд
for i:=0 to commandNumber-1 do
Readln(fil,MT[i]); //читаем сами команды
CloseFile(fil);
Symbol:=inpstr[idx];
State:='0'; {начальное состояние '0'}
while (State <> 'f')
do {и заканчиваем состоянием f}
begin
for i:=0 to commandNumber-1 do
{поиск нужной команды по состоянию и текущему символу}
if (State=MT[i][1]) and (Symbol=MT[i][2]) then
begin
State:=MT[i][3];
inpstr[idx]:=MT[i][4];
dir:=MT[i][5];
if dir='r' then
idx:=idx+1;
if dir='l' then
idx:=idx-1;
break;
end;
Symbol:=inpstr[idx];
end;
writeln(inpstr);
readln;
end.
ЛЕКЦИЯ 7. ПОНЯТИЕ ВЫЧИСЛИТЕЛЬНОЙ СЛОЖНОСТИ.
Аппарат машин Тьюринга позволяет изучить сложностные свойства алгоритмов. В информатике имеется несколько различных подходов к определению понятия сложности алгоритма. Например, понимают под сложностью число проверяемых логических условий. Каждое логическое условие определяет две различные ветки (пути) развития вычислительного процесса. Пусть число всех различных путей в программе есть N. Пусть pi - вероятность прохождения программы по i-му пути.
Тогда мерой информационной сложности алгоритма (программы) считают энтропию Э, вычисляемую по формуле:
Информационная сложность характеризует возможность п о н я т ь работу алгоритма. Чем больше величина энтропии, тем больше усилий требуется, чтобы разобраться в логике программы. Однако для практики большее значение имеет не информационная, а алгоритмическая или вычислительная сложность алгоритма. Понятие алгоритмической сложности введено советским математиком А.Н.Колмогоровым. Под алгоритмической сложностью он понимал минимально необходимый размер программы для данного алгоритма. Колмогоров полагал, что чем меньше размер записи программы, тем меньше ее сложность. На этом пути ему и его коллегам удалось получить ряд ценных результатов. Вместе с тем оказывается, что даже небольшие по длине записи программы могут требовать огромного времени счета на ЭВМ и это время катастрофически растет с ростом размера входных данных.
Таким образом, выявляется необходимость ввести иную концепцию сложности – вычислительную сложность задачи и связать вычислительную сложность задачи с числом тактов, затрачиваемых машиной Тьюринга, реализующей алгоритм решения этой задачи за кратчайшее возможное число ходов.
Р.Карп обнаружил, что все задачи условно можно разделить на хорошо решаемые (эффективно решаемые) и плохо решаемые (неэффективно решаемые). Разберемся в том, что такое хорошо решаемая задача и эффективный алгоритм. Рассмотрим в качестве примера задачу сортировки следующего массива чисел:
4, 8, 10, 3, 6,9,5,12.
Здесь всего 8 чисел. Один из возможных алгоритмов решения этой задачи состоит в следующем. Сначала найдем наименьшее число и поставим его на первое место. Затем найдем из оставшихся чисел следующее наименьшее число и поставим его на второе место и т.д.
Нетрудно сообразить, что для нахождения наименьшего числа из N чисел следует выполнить N-1 сравнение. Общее число сравнений, которые должен реализовать алгоритм, таким образом, составит
(N-1) + (N-2) + (N-3) + (N-4) + …. +1 = N*N- (1+2+3+…+N-1)=N*N-N*(N-1)/2=
=N*(N-1)/2.
Мы видим, что сложность алгоритма оценивается в этом случае п о л и н о м о м (многочленом, в данном случае второй степени) от числа исходных элементов. В разбираемом нами примере потребовалось бы выполнить 28 сравнений. Р.Карп назвал все алгоритмы, которые требуют полином шагов от размера задачи эффективными или полиномиальными.
Однако есть задачи и алгоритмы вычислительная сложность которых растет быстрее любого полинома. Такие задачи называют плохо решаемыми, а алгоритмы неэффективными.
Рассмотрим следующий пример. Дано слово
НОИКДПОНОК
Буквы в слове переставлены. Нужно определить, какое же слово здесь написано. Пусть наш алгоритм п е р е б и р а е т рутинным способом все возможные варианты и отыскивает полученное слово в словаре русского языка. Из математики известно, что число всех переборов из N элементов составляет N*(N-1)*(N-2)*…*2*1= N! (читается N факториал). В среднем придется сделать половину всех переборов, т.е. 0.58N! Это число для нашего слова все равно очень велико (между прочим, написано - подоконник) и составляет 1714400. Из математики опять-таки известно, что N! растет быстрее любого полинома от N и характер этого роста следует считать лавинообразным.
Для многих практически важных задач, к сожалению, не удается найти хороших алгоритмов, а неэффективные алгоритмы не имеют практической значимости.
Для построения классов вычислительной сложности рассматриваются задачи распознавания, требующие ответа ДА-НЕТ. С таким задачами мы уже встречались выше. Кроме того, для всех таких задач должен быть хороший алгоритм проверки решения.
ОПРЕДЕЛЕНИЕ. Класс задач распознавания типа ДА-НЕТ с хорошим алгоритмом проверки решения называется классом NP (nondeterministic polynomial).
Нам надо объяснить, почему здесь фигурирует слова nondeterministic polynomial (недетерминированный полиномиальный). Речь идет о том, что все такие задачи можно решить за полиномиальное время на н е д е т е р м и н и р о в а н н о й машине Тьюринга. В самом деле, рассмотрим нашу задачу об угадывании слова. Пусть в общем случае слово состоит из N>2 букв. Тогда имеется N правил для выбора позиции для первой буквы, N правил для выбора позиции второй буквы, N правил для выбора позиции третьей буквы и т.д., всего N2 правил. Однако имеется одно единственное вычисление, использующее ровно N правил, дающее правильный ответ. Это, разумеется, полиномиальное по сложности вычисление.
Итак, класс NP нами определен. В этом классе есть хорошие и плохие задачи. Подкласс хроших задач в NP называется классом P (polynomial). Подкласс плохих - вссе остальные. Гипотеза мирового значения, которая все еще не доказана, записывается как P=NP (?). Об этой гипотезе и связанной с ней проблемах мы будем говорить далее.
ЛЕКЦИЯ 8. Распознавание языков. Язык ВЫПОЛНИМОСТЬ.
Язык – это множество слов над некоторым алфавитом. Как и всякое другое множество, язык можно определить с помощью характеристической функции (формулы). Алгоритмически проблему распознавания можно сформулировать так: построить машину Тьюринга, вычисляющую характеристическую функцию данного языка. Для удобства определим характеристическую функцию произвольного языка следующим образом:
x L при fL(x)≠1 (например, fL(x) =0)
В этом определении под х следует понимать произвольное слово, записанное с помощью символов алфавита языка.
Определение. Машина Тьюринга распознает язык L, если она вычисляет характеристическую функцию данного языка.
Распознающую машину Тьюринга можно построить так, что она будет иметь два конечных состояния, условно обозначаемые как “ДА” и “НЕТ”. Завершение вычислений в состоянии ДА означает, что входное слово распознано как принадлежащее данному языку; в противном случае – как не принадлежащее.
Важной особенностью распознающей машины Тьюринга является то, что она не изменяет в общем случае входное слово. Следовательно, правила такой машины несколько отличаются от правил тех машин, которые мы ранее рассматривали.
Вспомним, как мы определяли правила машины Тьюринга. Для этого мы вводили таблицу вида (например)
|
0 |
1 |
|
Q0 |
ULQ0 |
0LQ0 |
UUQ1 |
В этой таблице определены три правила (по количеству ячеек). Внутри ячейки размещается операционная часть правила. Строка и столбец, определяющие ячейку, содержат условную часть правила. Условная часть просто сообщает, в какой ситуации следует применить правило. Например, условная часть (Q0,0) соответствующая первой строке и первому столбцу говорит: ”Если машина находится в состоянии Q0 и читает символ 0, то следует выполнить действие ULQ0”.
Так вот, операционная часть распознающей машины не содержит в общем случае операции записи нового символа (хотя имеется целый класс распознающих машин, которые используют операцию записи, правда, не вместо текущего символа).
Рассмотрим пример следующей машины
|
0 |
1 |
|
Q0 |
LQ0 |
QДА |
QНЕТ |
Посмотрим, как эта машина принимает слово 00100. До тех пор, пока не встретится первая единица, машина будет находиться в состоянии Q0. Как только встретится первая единица, машина завершит работу в состоянии ДА. Теперь нетрудно сообразить, что данная машина распознает язык, не содержащий полностью нулевых слов. Обратите внимание на правила машины Тьюринга.
Пример. Пусть алфавит языка есть {0,1}. Характеристическая функция fL(x) языка задается следующим образом:
fL(x)=1, если в слове х содержится три и более “1”
fL(x) =0 в противном случае.
Нетрудно построить программу (алгоритм) для вычисления характеристической функции этого языка. Это говорит о том, что представленный язык распознаваем.
Важным понятием в теории распознавания языков является понятие недетерминированной машины Тьюринга.
Вспомним, как мы определяли правила машины Тьюринга. Для этого мы вводили таблицу вида (например)
|
0 |
1 |
|
Q0 |
ULQ0 |
0LQ0 |
UUQ1 |
В этой таблице определены три правила (по количеству ячеек). Внутри ячейки размещается операционная часть правила. Строка и столбец, определяющие ячейку, содержат условную часть правила. Условная часть просто сообщает, в какой ситуации следует применить правило. Например, условная часть (Q0,0) соответствующая первой строке и первому столбцу говорит: ”Если машина находится в состоянии Q0 и читает символ 0, то следует выполнить действие ULQ0”.
Но могут существовать машины, в которых допускается применять любое из нескольких возможных правил с одинаковой условной частью. Например, построим следующую таблицу
|
0 |
1 |
|
Q0 |
ULQ0 UUQНЕТ |
0LQ0 |
UUQДА |
Теперь в ячейке (Q0, 0) имеется два правила. Какое из этих правил использовать? В принципе, - любое. С точки зрения распознавания языка можно сказать, что если имеется последовательность применения правил таблицы на данном входе, которая завершается в конечном принимающем состоянии, то данное входное слово принадлежит рассматриваемому языку.
Для иллюстрации сказанного рассмотрим следующий пример
|
0 |
1 |
|
Q0 |
LQ0 LQ1
|
LQ1
|
QНЕТ |
Q1 |
QДА |
LQ0
|
QНЕТ |
Рассмотрим входное слово 000. Теперь уже машина может сразу же выполнить правило
LQ1. После этого на втором такте может завершить работу в состоянии ДА. Кроме того, можно убедиться, что машина принимает все слова, заканчивающиеся на 10, которой может предшествовать группа из подряд идущих нулей.
Определение. Машина Тьюринга называется недетерминированной, если и только если она содержит два или более правил с одинаковой условной частью и различными операционными частями.
Замечательным фактом является следующий (доказанный выше). Для всякой недетерминированной распознающей машины Тьюринга можно построить эквивалентную ей детерминированную машину.
В практическом плане важным языком является язык ВЫПОЛНИМОСТЬ. Словами этого языка являются дизъюнкты. Примерами дизъюнктов являются следующие:
и т.д.
Здесь хi являются булевскими переменными. Булевская переменная может принимать только два значения: 0, 1. Черта сверху над переменной означает ее отрицание. Правила отрицания таковы:
Значок v
называется операцией логическое “ИЛИ”
(а также дизъюнкцией).
Эта операция дает в результате единицу,
если и только если хотя бы одна из
участвующих в ней переменных равна 1.
Таким образом, дизъюнкт
равен 1 при значениях переменных,
представленных в следующей таблице
x1 |
x2 |
x3 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
Набор логических значений для переменных называется интерпретацией. Интерпретация, при которой дизъюнкт равен 1, называется выполняющей интерпретацией.
Задача ВЫПОЛНИМОСТЬ заключается в следующем. Имеется множество дизъюнктов. Спрашивается, имеется ли для этого множества дизъюнктов хотя бы одна общая выполняющая интерпретация? Если ДА, то множество дизъюнктов называется выполнимым. Если НЕТ, то множество дизъюнктов называется невыполнимым. Эта задача имеет только кажущуюся простоту. На самом деле, проблема упирается в отыскание эффективного алгоритма ее решения, которую мы рассматриваем на следующем практическом занятии.
Язык ВЫПОЛНИМОСТЬ содержит множество слов, представляющих все выполнимые системы дизъюнктов.
Проблема распознавания языка ВЫПОЛНИМОСТЬ связана с распознаванием выполнимости данной системы дизъюнктов. Если система дизъюнктов выполнима, то это легко проверить, используя значения переменных выполняющей интерпретации. Проверку можно реализовать на недетерминированной в общем случае машине Тьюринга.
Проверка просто устанавливает, удовлетворяет ли найденное решение условиям задачи.
Сложностью проверки называется функция для числа тактов проверочной процедуры в зависимости от длины описания задачи (размера описания задачи). Оказывается, по критерию сложности все машины Тьюринга можно разделить на два класса: машины с функцией сложности, ограниченной некоторым полиномом и машины с функцией сложности, не ограниченной полиномом. Первый тип машин называется также эффективным.
Язык ВЫПОЛНИМОСМТЬ знаменит в силу следующего обстоятельства. Он является универсальным в некотором классе языков. Поэтому определим этот класс, кстати, весьма представительный.
Класс NP (NP – Nondeterministic Polynomial) – это класс языков с процедурой проверки, реализуемой за полиномиальное время на недетерминированной машине Тьюринга. Имейте в виду, что любой детерминированный алгоритм есть частный случай недетерминированного алгоритма.
Определение. Задача А эффективно сводится к задаче В, если
Решение задачи B дает решение задачи А;
Сложность сведения ограничена полиномиальной функцией.
Примеры сведений.
Задача ВЫПОЛНИМОСТЬ эффективно сводится к задаче 3-ВЫПОЛНИМОСТЬ. Задача 3-ВЫПОЛНИМОСТЬ – это задача ВЫПОЛНИМОСТЬ, каждый дизъюнкт которой содержит не более 3-ех переменных. Рассмотрим на пример, как эта сводимость реализована.
Пусть дана система дизъюнктов
S=
Здесь только второй дизъюнкт содержит более 3 переменных. Заменим второй дизъюнкт, как показано ниже:
S1=
Можно усмотреть следующий общий прием. Мы вводим дополнительную переменную в каждый дизъюнкт, содержащий более трех переменных. Затем отсчитываем три литеры и переносим оставшиеся переменные в новый дизъюнкт. В перенесенном дизъюнкте мы добавляем новую литеру, но уже с отрицанием и т.д.
Задание 6. Доказать, что системы S и S1 эквивалентны.
Указание. Доказательство можно провести с помощью таблицы истинности. Для этого следует ввести понятие таблицы истинности. В нашем случае такую таблицу следует заметно укоротить до
y1 |
y2 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
Возьмем любую строчку из этой таблицы и подставим ее в S1. Ясно, что из выполнимости полученной новой системы автоматически будет следовать выполнимость системы S.
Наоборот, допустим, что система S выполнима, а S1 – невыполнима. Это значит, что как минимум один дизъюнкт в S1 не выполним. Такой дизъюнкт всегда содержит хотя бы одну новую переменную. Дадим этой переменной значение 1. По этому способу можно добраться до последнего дизъюнкта. Завершите эту схему рассуждений.
Задача о паросочетаниях сводится к задаче ВЫПОЛНИМОСТЬ.
Пусть имеется 5 девушек a,b,c,d,e и пять парней x,y,z,w,u. В следующей матрице 1 на пересечении строки i и столбца j означает взаимную симпатию, а 0 – в лучшем случае безразличие. Следует подобрать 5 пар, взаимно симпатизирующих друг другу.
|
a |
b |
c |
d |
e |
x |
1 |
|
1 |
|
|
z |
|
1 |
|
|
1 |
y |
1 |
|
|
1 |
|
u |
|
|
1 |
1 |
|
w |
|
1 |
|
|
1 |
ЛЕКЦИЯ 9. Метод резолюций Робинсона.
Напомним, что задача ВЫПОЛНИМОСТЬ требует установить, имеется ли для данной системы дизъюнктов общая выполняющая интерпретация. Напомним также, что примерами дизъюнктов являются следующие:
и т.д.
Здесь хi являются булевскими переменными. Булевская переменная может принимать только два значения: 0, 1. Черта сверху над переменной означает ее отрицание. Правила отрицания таковы:
Значок v
называется операцией логическое “ИЛИ”
(а также дизъюнкцией).
Эта операция дает в результате единицу,
если и только если хотя бы одна из
участвующих в ней переменных равна 1.
Таким образом, дизъюнкт
равен 1 при значениях переменных,
представленных в следующей таблице
x1 |
x2 |
x3 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
Набор логических значений для переменных называется интерпретацией. Интерпретация, при которой дизъюнкт равен 1, называется выполняющей интерпретацией.
Задача ВЫПОЛНИМОСТЬ заключается в следующем. Имеется множество дизъюнктов. Спрашивается, имеется ли для этого множества дизъюнктов хотя бы одна общая выполняющая интерпретация? Если ДА, то множество дизъюнктов называется выполнимым. Если НЕТ, то множество дизъюнктов называется невыполнимым. Эта задача имеет только кажущуюся простоту. На самом деле, проблема упирается в отыскание эффективного алгоритма ее решения, которую мы рассматриваем на следующем практическом занятии.
Принцип резолюций. Принцип резолюций заключается в систематическом построении следствий из текущей системы дизъюнктов на основе операции резолюционирования. Следствия называются резольвентами. Резольвенты строятся для пары дизъюнктов, содержащей контрарную пару литер (булевских переменных). Например, пусть даны два дизъюнкта
Эти
дизъюнкты содержат контрарную пару
литер -
(одна входит в дизъюнктD1
без отрицания, вторая – в дизъюнкт D2
с отрицанием).
Резольвентой
дизъюнктов D1
и D2
является новый дизъюнкт D1,2
, который не содержит контрарной пары
литер, но содержит все другие литеры из
D1
и D2.
Согласно этому определению, получим
D1,2=.
Целью построения резольвент является достижение следующих возможных исходов:
Резольвента оказалась пустой. Например, пустую резольвенту дает следующая пара дизъюнктов
В случае пустой резольвенты делается вывод о невыполнимости системы дизъюнктов (т.е. задача ВЫПОЛНИМОСТЬ не имеет решения в этом случае).
Невозможно построить новую резольвенту (началось зацикливание). В этом случае делается вывод о выполнимости исходной системы дизъюнктов.
Рассмотрим некоторый полный пример.
Решить следующую задачу ВЫПОЛНИМОСТЬ.
Находим резольвенту D1 и D2 :
D1,2=
Находим резольвенту D1,2 и D3 :
D1,2,3=
Дизъюнкты D1,2,3 и D4 дают пустую резольвенту. Вывод – исходная задача ВЫПОНИМОСТЬ не имеет решения.
Проблема метода резолюций – его неэффективность в сложностном смысле. Найти эффективный алгоритм для задачи ВЫПОЛНИМОСТЬ или доказать, что такого алгоритма нет – одна из глобальных нерешенных задач современности. Различные модификации принципа резолюций направлены на сокращение перебора.
Метод отсечения литер.
Рассмотрим одну из заслуживающих внимания модификаций принципа резолюций.
Этот метод
заключается в последовательном исключении
булевских переменных из системы. Сначала
избавляемся, скажем, от переменной
,
затем – от переменной
и т.д. Такой систематический процесс
рано или поздно завершится и по получению
(не получению) пустого дизъюнкта можно
будет судить о противоречивости системы
(или нет). Рассмотрим пример из задания
1. Для начала избавимся от переменной
. С этой целью выпишем все дизъюнкты,
содержащие переменную
:
Теперь найдем все
возможные резольвенты выписанных
дизъюнктов с исключаемой литерой
.
Выпишем эти резольвенты отдельно и
добавим к ним те дизъюнкты из исходной
системы, которые не содержали литеры
.
Получим следующую систему:
И эту систему можно еще более упростить, если удалить как бесполезные так называемые тавтологические дизъюнкты. Дизъюнкт называется тавтологическим, если он содержит как переменную, так и ее отрицание. В итоге, последняя система упрощается до следующей
Продолжаем процесс
избавления от переменных. На этот раз
исключим переменную
Получим следующую систему
Теперь ясно, что никакого пустого дизъюнкта получить не удастся. Делаем вывод, что система выполнима (не противоречива).