Что такое алгоритм?
Схемы
Схема (булева) — это способ вычислить функцию . Помимо исходных переменных , для которых вычисляется значение , схема использует некоторое количество вспомогательных переменных и некоторый набор ( базис ) булевых (т.е. принимающих значения 0 или 1) функций . Схема в базисе определяется последовательностью присваиваний . Каждое присваивание имеет вид , где , а переменная ( ) — это либо одна из исходных переменных ( ), либо вспомогательная переменная с меньшим номером ( ). Таким образом, для каждого набора значений исходных переменных последовательное выполнение присваиваний, входящих в схему, однозначно определяет значения всех вспомогательных переменных. Результатом вычисления считаются значения последних переменных .
Схема вычисляет функцию , если для любых значений исходных переменных результатом вычисления является .
Схема называется формулой, если каждая вспомогательная переменная используется в правой части присваиваний только один раз. (Обычные математические формулы именно так задают последовательность присваиваний: "внутри" формул не принято использовать ссылки на их части или другие формулы.)
Схему можно также представлять в виде ориентированного ациклического графа, у которого вершины входной степени 0 ( входы ) помечены исходными переменными; остальные вершины ( функциональные элементы ) помечены функциями из базиса (при этом входная степень вершины должна совпадать с количеством аргументов ее пометки); ребра помечены числами, указывающими номера аргументов; вершины выходной степени 0 ( выходы ) помечены переменными, описывающими результат работы схемы. Вычисление на графе определяется индуктивно: как только известны значения всех вершин , из которых ведут ребра в данную вершину , вершина получает значение , где — базисная функция, которой помечена вершина. При переходе к графу схемы мы опускаем несущественные присваивания, которые ни разу не используются на пути к выходным вершинам, так что они никак не влияют на результат вычисления.
Базис называется полным, если для любой булевой функции есть схема в этом базисе, вычисляющая . Ясно, что в полном базисе можно вычислить произвольную функцию (такую функцию можно представить как упорядоченный набор из булевых функций).
Булева функция может быть задана таблицей значений. Приведем таблицы значений для трех функций
( отрицание, дизъюнкция, конъюнкция ), образующих полный базис, который будем считать стандартным. В дальнейшем имеются в виду схемы именно в этом базисе, если явно не указано что-либо иное.Конъюнкция и дизъюнкция определяются для произвольного числа булевых переменных аналогичным образом: конъюнкция равна 1 только тогда, когда все аргументы равны 1, а дизъюнкция равна 0 только тогда, когда все аргументы равны 0. В стандартном базисе они очевидным образом вычисляются схемами (и даже формулами) размера .
Теорема 1.1. Базис — полный.
Доказательство. Литералом будем называть переменную или ее отрицание. Конъюнкцией литералов (это схема и даже формула) легко представить функцию , которая принимает значение 1 ровно один раз: при . Если , включаем в конъюнкцию переменную , если , то включаем в конъюнкцию . Произвольная функция может быть представлена в виде
( 1.1) |
В таком случае говорят, что представлена в дизъюнктивной нормальной форме (ДНФ), т.е. как дизъюнкция конъюнкций литералов2Далее нам еще потребуется и конъюнктивная нормальная форма (КНФ) — конъюнкция дизъюнкций литералов. Как уже говорилось, дизъюнкция нескольких переменных выражается формулой в стандартном базисе.
Размером схемы называется количество присваиваний в схеме. Минимальный размер схемы в базисе , вычисляющей функцию , называется схемной сложностью функции в базисе и обозначается . Переход от одного полного конечного базиса к другому полному конечному базису меняет схемную сложность функций на множитель . Так что в асимптотических оценках выбор конкретного полного базиса неважен и поэтому будем использовать обозначение для схемной сложности в конечном полном базисе.
Каждый предикат на множестве определяет последовательность булевых функций следующим образом: , где справа стоит характеристическая функция предиката .
Определение 1.5. Предикат принадлежит классу , если .
Теорема 1.2. .
Если МТ работает за полиномиальное время, то и память, которую она использует, ограничена полиномом. Поэтому весь процесс вычисления на входном слове длины можно представить таблицей вычисления размера , где , .
Строка с номером таблицы задает состояние МТ после тактов работы. Символы , записанные в таблице, принадлежат алфавиту . Символ определяет пару (символ, записанный в -й ячейке после тактов работы; состояние управляющего устройства после тактов работы, если головка находится над -й ячейкой, в противном случае второй элемент пары — ). Для простоты также считаем, что если вычисление заканчивается при некотором входе за тактов, то строки c номерами, большими , повторяют строку с номером .
Построить схему, вычисляющую значения предиката на словах длины , можно следующим образом. Состояние каждой клетки таблицы можно закодировать конечным (не зависящим от ) числом булевых переменных. Имеются локальные правила согласования, т.е. состояние каждой клетки в строке ниже нулевой однозначно определяется состояниями клеток в предыдущей строке, лежащих непосредственно над данной ( ), левее данной ( ) и правее данной ( ). Каждая переменная, кодирующая состояние клетки , есть функция от переменных, кодирующих состояния клеток , , . Все эти функции могут быть вычислены схемами конечного размера. Объединяя эти схемы, получим схему, вычисляющую все переменные, кодирующие состояния клеток таблицы; размер этой схемы будет .
Осталось заметить, что переменные, кодирующие часть клеток нулевой строки, определяются входным словом, а переменные, кодирующие остальные клетки нулевой строки, являются константами. Чтобы узнать результат вычисления, нужно определить символ, записанный в нулевой ячейке ленты в конце вычисления. Без ограничения общности можно считать, что состояния клеток таблицы кодируются так, что одна из кодирующих переменных равна 1 только в том случае, когда в ячейке записана 1. Тогда значение этой переменной для кода и будет результатом вычисления.
Замечание 1.1. Класс шире класса . Любой функции от натурального аргумента со значениями в можно сопоставить предикат по правилу , где обозначает длину слова . Ограничение такого предиката на слова длины тождественно равно 0 или 1 (в зависимости от ). Схемная сложность таких функций ограничена константой. Поэтому все такие предикаты по определению принадлежат P/poly, хотя среди них есть и неразрешимые предикаты.
Справедливо следующее усиление теоремы.
Теорема 1.3. принадлежит тогда и только тогда, когда
- существует МТ, которая по числу за время строит схему вычисления .
Доказательство. Данное в доказательстве теоремы 1.2. описание нетрудно превратить в МТ, которая строит схему вычисления за полиномиальное по время (схема имеет простую структуру: каждая переменная связана с предыдущими одними и теми же правилами согласования).
Столь же просто. Вычисляем размер входного слова. Затем строим по этому размеру схему вычисления , используя указанную в условии 2 машину. После этого вычисляем на машине, которая по описанию схемы и значениям входных переменных вычисляет значение схемы за полиномиальное от длины входа время.