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

Что такое алгоритм?

Схемы

Схема (булева) — это способ вычислить функцию f\colon\cb^n\double\to\cb^m. Помимо исходных переменных x_1,\dots, x_n, для которых вычисляется значение f, схема использует некоторое количество вспомогательных переменных y_1,\dots, y_s и некоторый набор ( базис ) булевых (т.е. принимающих значения 0 или 1) функций \cal F. Схема S в базисе \cal F определяется последовательностью присваиваний Y_1,\dots, Y_s. Каждое присваивание Y_i имеет вид y_i:=f_j(u_{k_1},\dots,u_{k_r}), где f_j(\cdot)\in\cal F, а переменная u_{k_p} ( 1\leq p\leq r ) — это либо одна из исходных переменных x_t ( 1\leq t\leq n ), либо вспомогательная переменная y_l с меньшим номером ( 1\leq l<i ). Таким образом, для каждого набора значений исходных переменных последовательное выполнение присваиваний, входящих в схему, однозначно определяет значения всех вспомогательных переменных. Результатом вычисления считаются значения последних m переменных y_{s-m+1},\dots,y_s.

Схема вычисляет функцию f, если для любых значений x_1,\dots,x_n исходных переменных результатом вычисления является f(x_1,\dots,x_n).

Схема называется формулой, если каждая вспомогательная переменная используется в правой части присваиваний только один раз. (Обычные математические формулы именно так задают последовательность присваиваний: "внутри" формул не принято использовать ссылки на их части или другие формулы.)

Схему можно также представлять в виде ориентированного ациклического графа, у которого вершины входной степени 0 ( входы ) помечены исходными переменными; остальные вершины ( функциональные элементы ) помечены функциями из базиса (при этом входная степень вершины должна совпадать с количеством аргументов ее пометки); ребра помечены числами, указывающими номера аргументов; вершины выходной степени 0 ( выходы ) помечены переменными, описывающими результат работы схемы. Вычисление на графе определяется индуктивно: как только известны значения всех вершин y_1,\dots,y_{k_v}, из которых ведут ребра в данную вершину v, вершина v получает значение y_v\double=f_v(y_1,\dots,y_{k_v}), где f_v — базисная функция, которой помечена вершина. При переходе к графу схемы мы опускаем несущественные присваивания, которые ни разу не используются на пути к выходным вершинам, так что они никак не влияют на результат вычисления.

Базис называется полным, если для любой булевой функции f есть схема в этом базисе, вычисляющая f. Ясно, что в полном базисе можно вычислить произвольную функцию f\colon\cb^n\to\cb^m (такую функцию можно представить как упорядоченный набор из m булевых функций).

Булева функция может быть задана таблицей значений. Приведем таблицы значений для трех функций

\NOT(x)=\neg x,\ \OR(x_1,x_2)= x_1\vee x_2,\ \AND(x_1,x_2)=x_1\wedge x_2
( отрицание, дизъюнкция, конъюнкция ), образующих полный базис, который будем считать стандартным. В дальнейшем имеются в виду схемы именно в этом базисе, если явно не указано что-либо иное.
\begin{array}{c|cccc|cccc|c}
					x&\NOT&\quad& x_1&x_2&\OR&\quad& x_1&x_2&\AND\\
					\cline{1-2}\cline{4-6}\cline{8-10} 0&1 &\quad& 0&0&0 &\quad& 0&0&0\\
					1&0 &\quad& 0&1&1 &\quad& 0&1&0\\ \multicolumn{2}{c}{} &\quad&
					1&0&1 &\quad& 1&0&0\\ \multicolumn{2}{c}{} &\quad& 1&1&1
					&\quad& 1&1&1\\ \end{array}

Конъюнкция и дизъюнкция определяются для произвольного числа булевых переменных аналогичным образом: конъюнкция равна 1 только тогда, когда все аргументы равны 1, а дизъюнкция равна 0 только тогда, когда все аргументы равны 0. В стандартном базисе они очевидным образом вычисляются схемами (и даже формулами) размера n-1.

Теорема 1.1. Базис \{\NOT,\OR,\AND\} — полный.

Доказательство. Литералом будем называть переменную или ее отрицание. Конъюнкцией литералов (это схема и даже формула) легко представить функцию \chi_u(x), которая принимает значение 1 ровно один раз: при x=u. Если u_i=1, включаем в конъюнкцию переменную x_i, если u_i=0, то включаем в конъюнкцию \neg x_i. Произвольная функция f может быть представлена в виде

f(x)=\bigvee_{u: f(u)=1}\chi_u(x). ( 1.1)

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

Размером схемы называется количество присваиваний в схеме. Минимальный размер схемы в базисе \cal F, вычисляющей функцию f, называется схемной сложностью функции f в базисе \cal F и обозначается c_\cal F(f). Переход от одного полного конечного базиса к другому полному конечному базису меняет схемную сложность функций на множитель O(1). Так что в асимптотических оценках выбор конкретного полного базиса неважен и поэтому будем использовать обозначение c(f) для схемной сложности f в конечном полном базисе.

Каждый предикат f на множестве \cb^* определяет последовательность булевых функций f_n\colon \cb^n\to\cb следующим образом: f_n(x_1,x_2,\dots,x_n)= f(x_1x_2\dots x_n), где справа стоит характеристическая функция предиката f.

Определение 1.5. Предикат f принадлежит классу P/poly, если c(f_n)=\poly(n).

Теорема 1.2. \P\subset P/poly.

Если МТ работает за полиномиальное время, то и память, которую она использует, ограничена полиномом. Поэтому весь процесс вычисления на входном слове x длины n можно представить таблицей вычисления размера T\times S, где T= \poly(n), S= \poly(n).


Рис. 1.1.

Строка с номером j таблицы задает состояние МТ после j тактов работы. Символы \Gamma_{j,k}, записанные в таблице, принадлежат алфавиту \cal S\times\{\emptyset\cup\cal Q\}. Символ \Gamma_{j,k} определяет пару (символ, записанный в k -й ячейке после j тактов работы; состояние управляющего устройства после j тактов работы, если головка находится над k -й ячейкой, в противном случае второй элемент пары — \emptyset ). Для простоты также считаем, что если вычисление заканчивается при некотором входе за T'<T тактов, то строки c номерами, большими T', повторяют строку с номером T'.

Построить схему, вычисляющую значения предиката на словах длины n, можно следующим образом. Состояние каждой клетки таблицы можно закодировать конечным (не зависящим от n ) числом булевых переменных. Имеются локальные правила согласования, т.е. состояние каждой клетки \Gamma в строке ниже нулевой однозначно определяется состояниями клеток в предыдущей строке, лежащих непосредственно над данной ( \Gamma' ), левее данной ( \Gamma'_л ) и правее данной ( \Gamma'_п ). Каждая переменная, кодирующая состояние клетки \Gamma, есть функция от переменных, кодирующих состояния клеток \Gamma'_л, \Gamma', \Gamma'_п. Все эти функции могут быть вычислены схемами конечного размера. Объединяя эти схемы, получим схему, вычисляющую все переменные, кодирующие состояния клеток таблицы; размер этой схемы будет O(ST)=O(n^{O(1)}).

Осталось заметить, что переменные, кодирующие часть клеток нулевой строки, определяются входным словом, а переменные, кодирующие остальные клетки нулевой строки, являются константами. Чтобы узнать результат вычисления, нужно определить символ, записанный в нулевой ячейке ленты в конце вычисления. Без ограничения общности можно считать, что состояния клеток таблицы кодируются так, что одна из кодирующих переменных равна 1 только в том случае, когда в ячейке записана 1. Тогда значение этой переменной для кода \Gamma_{T,0} и будет результатом вычисления.

Замечание 1.1. Класс P/poly шире класса P. Любой функции от натурального аргумента \varphi(n) со значениями в \cb можно сопоставить предикат f_\varphi по правилу f_\varphi(x)=\varphi(|x|), где |x| обозначает длину слова x. Ограничение такого предиката на слова длины n тождественно равно 0 или 1 (в зависимости от n ). Схемная сложность таких функций ограничена константой. Поэтому все такие предикаты по определению принадлежат P/poly, хотя среди них есть и неразрешимые предикаты.

Справедливо следующее усиление теоремы.

Теорема 1.3. f принадлежит \P тогда и только тогда, когда

  1. f\in P/poly
  2. существует МТ, которая по числу n за время \poly(n) строит схему вычисления f_n.

Доказательство. \Longrightarrow Данное в доказательстве теоремы 1.2. описание нетрудно превратить в МТ, которая строит схему вычисления f_n за полиномиальное по n время (схема f_n имеет простую структуру: каждая переменная связана с предыдущими одними и теми же правилами согласования).

\Longleftarrow Столь же просто. Вычисляем размер входного слова. Затем строим по этому размеру схему S_{|x|} вычисления f_{|x|}, используя указанную в условии 2 машину. После этого вычисляем S_{|x|}(x) на машине, которая по описанию схемы и значениям входных переменных вычисляет значение схемы за полиномиальное от длины входа время.