Московский государственный университет имени М.В.Ломоносова
Опубликован: 15.03.2007 | Доступ: свободный | Студентов: 576 / 7 | Оценка: 5.00 / 4.50 | Длительность: 19:30:00
Специальности: Программист
Дополнительный материал 1:

Решения задач

< Лекция 14 || Дополнительный материал 1: 12345678910

1.19 а) \Longrightarrow б). Граф, представляющий формулу, можно сделать деревом, если размножить входные переменные. Размер при этом увеличится не более, чем вдвое.

Для построения схемы глубины O(\log n), вычисляющей формулу X размера n, используем идею, примененную в решении задач 1.14 и 1.15.

Двигаясь от корня дерева, представляющего формулу, и выбирая каждый раз вершину, соответствующую подформуле большего размера, мы найдем рано или поздно подформулу Z, размер которой лежит между n/3 и 2n/3. Заменяя в формуле X подформулу Z независимой переменной z, получаем формулу Y с такими же оценками на размер.

Пусть для Z и Y есть вычисляющие их схемы глубины не больше h. Построим для всей формулы X схему глубины не больше h+3. Вычислим 3 переменные подсхемами глубины не больше h: y_0значение формулы Y при z=0, y_1значение формулы Y при z=1, sзначение формулы Z. Значение f всей формулы равно

f =\left(y_0\wedge \neg s\right)\vee \left(y_1\wedge s\right).
Это формула глубины 3.

Итак, для h(L) — минимальной глубины схемы, вычисляющей формулу размера L, выполнено рекуррентное соотношение:

h(L)\leq h(\frac{2L}3)+3.
Из него следует h(L)=O(\log L).

б) \Longrightarrow а). Это совсем просто. Превратим граф схемы в дерево, размножая при необходимости вершины. Размер этого дерева не будет превышать количества ориентированных путей от выхода ко входам. А таких путей не более 2^h.

1.20 Вспомним конструкцию неразрешимого предиката f_\ph(x), принадлежащего P/poly, которая приведена в замечании 1.1.

Сейчас мы будем строить такой предикат f_\ph(x), чтобы он был разрешим, но не принадлежал P. Мы построим такую вычислимую функцию \ph(n), что любой алгоритм ее вычисления работает дольше, чем 2^n. Другими словами, есть алгоритм распознавания принадлежности языку H, состоящему из двоичных записей тех чисел n, для которых \ph(n)=1 ; но время работы в наихудшем случае любого такого алгоритма на словах длины m растет быстрее, чем 2^{2^m}.

Докажем более общее утверждение. Пусть f(n) — вычислимая функция. Обозначим через \calM_f язык, состоящий из таких пар ([M],x), что машина M на входе x останавливается за время f(|x|). Принадлежность этому языку разрешима (запустим универсальную машину Тьюринга со входом ([M],x), отсчитаем f(|x|) тактов работы M и посмотрим — остановилась ли M ). Но быстро проверить эту разрешимость нельзя, как показывает следующее рассуждение, почти дословно повторяющее решение задачи 1.3.

Пусть машина A распознает принадлежность языку \calM_f слов длины n за время T(n). Тогда есть и такая машина A', которая на входе X запускает A на входе (X,X), после чего в случае ответа "да" переходит в состояние, в котором головка двигается вправо (и машина не останавливается), а в случае ответа "нет" останавливается. Смоделировать работу A за время T(n) можно за время T'(n)=O(T^2(n)). Если T'(n)<f(n), то что скажет A о слове ([A'],[A'])? Если "да", то приходим к противоречию с определением машины A', если "нет" — тоже приходим к противоречию. Поэтому T'(n)\geq f(n), а T(n)\double=\Omega(f^{1/2}(n)).

Итак, мы доказали, что время работы любого алгоритма, распознающего принадлежность слова языку \calM_f не меньше, чем \Omega(f^{1/2}).

Взяв в качестве f функцию 2^{2^n}, получим решение задачи.

Из раздела 2

2.1 Напомним, что литералом называется переменная или ее отрицание. Литералы будем обозначать l_1, l_2,\dots. Алгоритм решения задачи 2-КНФ будет работать в три этапа.

Этап 1. Перебираем все пары дизъюнкций. Если встречаем пару l_1\vee x, l_2\vee \neg x, то добавляем к КНФ дизъюнкцию l_1\vee l_2. Если все пары (включая добавленные дизъюнкции) просмотрены, то переходим к этапу 2.

Этап 2. Проверяем для каждой пары переменных, сколько дизъюнкций использует эту пару. Если каждая пара используется не более одного раза, то выдаем ответ "да" (КНФ выполнима). Если нашлась пара переменных, используемая по крайней мере в двух дизъюнкциях, выполняем сокращение: делаем подстановку равенств, указанных в третьей строчке следующей таблицы, во все дизъюнкции и если получаем противоречие ( (x=0)\wedge(x=1) или (x=\neg y)\wedge(x=y)), то выдаем ответ "нет", в противном случае переходим к этапу 3.

\begin{array}{llllll} x\vee y      & x\vee     y &x\vee y           &\neg x\vee y &\neg x\vee \neg y &\neg x\vee \neg y \\ \wedge  & \wedge  &\wedge  &\wedge  &\wedge  &\wedge  \\ x\vee \neg y &\neg x\vee y &\neg x\vee \neg y &x\vee \neg y &\neg x\vee y    &x\vee \neg y \\ \hline x=1          & y=1         & x=\neg y         & x=y         & x=0              & y=0 \end{array} }

Этап 3. Решаем полученную на этапе 2 задачу с меньшим числом переменных и повторяем ее ответ.

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

\bigl((l_1\vee x)\wedge (l_2\vee \neg x)\bigr) \Longrightarrow (l_1\vee l_2),
на первом этапе мы добавляем следствия уже имеющихся конъюнкций. Во-вторых, для каждого столбца приведенной выше таблицы легко проверить, что конъюнкция первых двух строчек эквивалентна равенству в третьей строчке. Поэтому выполнимость исходной КНФ эквивалентна выполнимости сокращенной КНФ.

Наконец, докажем, что если на каждой паре переменных есть не более одной дизъюнкции, то КНФ, полученная ко второму этапу, выполнима. Присвоим значение переменной x_1 произвольным образом, затем учтем все следствия этого присвоения. Первой из переменных, которой не присвоено значение, также присвоим значение произвольным образом и т.д. Когда мы не получим выполняющего набора значений переменных? Только в том случае, если для некоторой переменной из значений ранее определенных переменных будут следовать и 0, и 1. Рассмотрим самое раннее такое противоречие. Оно означает, что имеются дизъюнкции l_1\vee x и l_2\vee \neg x, а также, что l_1\vee l_2=0. Но это невозможно, так как в этом случае дизъюнкция l_1\vee l_2 также входит в КНФ после этапа 1.

Теперь оценим время работы алгоритма в худшем случае. Обозначим его через T(n), где n — число переменных (число переменных заведомо не превосходит длины входа). По построению имеем следующее рекуррентное соотношение

T(n)\leq O(n^4)+T(n-1),
откуда следует T(n)=O(n^5).

2.2 Степенью вершины в графе называется количество ребер, выходящих из этой вершины. Необходимым условием существования эйлерова пути является связность графа: должен существовать путь из любой вершины в любую. Чтобы выяснить, существует ли эйлеров путь в связном графе, достаточно подсчитать количество вершин нечетной степени в этом графе. Если оно не превосходит 2, то эйлеров путь есть, в противном случае — нет.

Вторая часть этого утверждения очевидна: если есть эйлеров путь, то все вершины графа имеют четную степень, кроме начальной и конечной вершин эйлерова пути (если начальная и конечная вершины совпадают, то степени всех вершин четны).

Доказательство существования эйлерова пути основано на таком простом наблюдении: если есть два замкнутых пути без общих ребер, но с общей вершиной, то их можно объединить в один путь (идем по первому пути до общей вершины, потом обходим второй путь и продолжаем движение по первому). Далее нужно применить индукцию по числу вершин и ребер в графе. Кратко изложим это индуктивное рассуждение (читателю рекомендуется восстановить опущенные детали самостоятельно).

Если все вершины графа G четной степени, то выберем в нем какой-нибудь замкнутый путь C. Выбросив ребра C из графа G, получим некоторое количество связных графов G_1, \dots, G_r, у которых все степени вершин четные. Так что в каждом из этих графов есть эйлеров путь (по индукции). Каждый из таких графов имеет хотя бы одну вершину на C (иначе G был бы несвязным). Поэтому можно применить изложенную выше конструкцию, чтобы построить из C и эйлеровых путей в графах G_j эйлеров путь в G.

Если в графе G есть две1Если у вас получился граф, у которого ровно одна вершина нечетной степени, то проверьте вычисления и найдите ошибку. вершины нечетной степени, то выберем связывающий их путь C. Дальнейшее рассуждение остается прежним.

Осталось заметить, что и подсчет степени вершины, и проверка связности графа могут быть выполнены за полиномиальное время.

2.3. Рассмотрим предикат Q\in\NP. По определению

Q(x)=\exists\, y\;\big((|y|<q(|x|))\wedge R(x,y)\big),
где q(\cdot)полином, а R(\cdot,\cdot)\in\P. В другой интерпретации слово y — это сообщение Мерлина, доказывающее истинность Q(x).

Предположим, что Артур полностью доверяет Мерлину, а тот имеет право отвечать только одним битом (и всегда дает правильный ответ на поставленный вопрос). Тогда Артур может восстановить слово y, выясняя его биты от первого до последнего, следующим образом. Если уже известны первые k битов, образующие слово u, то Артур может поинтересоваться у Мерлина, существует ли слово u0z, такое что R(x,u0z). При положительном ответе (k+1)бит полагается равным 0, при отрицательном — 1.

Если \P=\NP, то Артур может имитировать Мерлина.

2.4 Принадлежность задачи о паросочетаниях классу NP очевидна: Мерлину достаточно разбить мальчиков и девочек на пары, после чего Артур сможет убедиться, что пар ровно n и все выбранные пары согласны танцевать.

Доказательство принадлежности P будем проводить, переформулировав задачу в терминах теории графов. Есть двудольный граф (ребра соединяют только вершины из разных долей), нужно проверить, существует ли совершенное паросочетание, т.е. такой набор ребер, что каждая вершина инцидентна ровно одному ребру из набора (если каждая вершина графа инцидентна не более чем одному ребру из набора, то такой набор называется паросочетанием, размер паросочетания — количество входящих в него ребер).


Рис. 15.2.

Мы рассмотрим алгоритм, последовательно увеличивающий текущее паросочетание, начиная с пустого. Построение завершается либо совершенным паросочетанием, либо доказательством максимальности размера текущего паросочетания (и тогда совершенного паросочетания в графе нет).

Алгоритм будет использовать для увеличения размера текущего паросочетания построение чередующего пути (это такой путь в графе, который начинается и заканчивается в вершинах, не инцидентных ребрам паросочетания, и проходит попеременно по ребрам, принадлежащим и не принадлежащим паросочетанию). Заменив в паросочетании ребра чередующего пути, стоящие на четных местах, на ребра, стоящие на нечетных местах, мы увеличим размер паросочетания.

Обозначим текущее паросочетание через C, а множество вершин, инцидентных ребрам из C, — через W(C). Предположим, что в графе есть паросочетание C' большего размера. Рассмотрим граф A, образованный объединением ребер C и C'. Степени вершин в таком графе не превосходят 2, поэтому его компоненты связности — это пути (возможно, длины 1, т.е. ребра) и циклы (см. рис. 15.2, где сплошными линиями изображены ребра из C, а штриховыми — из C', на стрелки пока не нужно обращать внимание). Так как C' имеет больше ребер, чем C, то в A найдется компонента связности, содержащая больше ребер из C', чем из C. Такая компонента является, как нетрудно видеть, чередующим путем.

Итак, проверка максимальности заданного паросочетания C равносильна проверке существования чередующего пути. Последнюю можно сделать, например, так. Обозначим доли графа через V и U. Ориентируем ребра графа согласно следующему правилу: ребра, входящие в C, направлены из V в U, а все остальные ребра направлены противоположно (эта ориентация также изображена на рис. 15.2). Тогда существование чередующего пути равносильно существованию такой пары вершин u\in U\setminus W(C) и v\in V\setminus W(C), что из u в v есть ориентированный путь. Существование ориентированного пути с началом и концом в заданных вершинах проверяется способом, описанным в решении задачи 1.17, который работает и в случае ориентированного графа (матрица смежности становится несимметричной, что никак не влияет на вычисления).

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

2.5 б) Удобнее описывать сведение 3-КНФ к задаче независимое множество. В этой задаче по графу G и числу q требуется определить, существует ли в графе G множество вершин мощности q, никакая пара вершин которого не связана ребром ( независимое множество ).

Очевидно, что задача клика для графа G эквивалентна задаче независимое множество для дополнительного графа \bar Gдополнительном графе ребра и неребра меняются местами).


Рис. 15.3.

Возьмем 3-КНФ из m дизъюнкций, в которые входят n переменных. Граф, который сопоставляется этой КНФ, имеет 2n+4m вершин. Каждой переменной x_i соответствуют две вершины, связанные ребром. Пометим их x_i и \neg x_i (см. рис. 15.3a). Каждой дизъюнкции соответствуют четыре вершины, попарно связанные ребрами между собой. Вершины, соответствующие переменным и дизъюнкциям, связаны между собой так, как показано на рис. 15.3б), (нарисован пример для дизъюнкции l_1\vee l_2\vee l_3 ).

Очевидно, что такой граф строится по 3-КНФ полиномиальным алгоритмом.

По построению графа ясно, что любое независимое множество его вершин содержит не более n+m элементов. Докажем, что независимые множества размера n+m находятся во взаимно однозначном соответствии с выполняющими наборами значений для 3-КНФ, которое задается правилом: если из пары вершин, помеченных x_i и \neg x_i, в независимое множество входит вершина x_i, то в соответствующем этому независимому множеству наборе значений x_i=1, в противном случае x_i=0.

Из рис. 15.3б) легко усматривается корректность такого соответствия. В независимое множество размера n+m обязана входить хотя бы одна вершина из четверки, соответствующей дизъюнкции. Но это означает, что хотя бы одна из вершин, помеченных \neg l_1, \neg l_2, \neg l_3, в это множество не входит. И наоборот, если взять множество S вершин, соответствующих выполняющему набору для 3-КНФ, то оно однозначно дополняется до независимого множества размера n+m (проверьте по рис. рис. 15.3б), что для каждого набора значений l_1,l_2,l_3 (кроме нулевого набора!) из четверки, соответствующей дизъюнкции, однозначно выбирается вершина, которую можно добавить к S ).

< Лекция 14 || Дополнительный материал 1: 12345678910
Игорь Хан
Игорь Хан
Узбекистан, Ташкент, Ташкентский педагогический институт иностранных языков, 1990