Опубликован: 24.04.2007 | Доступ: свободный | Студентов: 720 / 35 | Оценка: 4.60 / 4.30 | Длительность: 25:56:00
Специальности: Программист
Лекция 2:

Схемы из функциональных элементов

< Лекция 1 || Лекция 2: 12345 || Лекция 3 >

Теорема 7. Пусть B_1 и B_2 — два полных набора булевых функций. Тогда соответствующие меры сложности отличаются не более чем на постоянный множитель: найдется такое число C, что \size_{B_1}(f)\hm\le
C\size_{B_2}(f) и \size_{B_2}(f)\hm\le C\size_{B_1}(f) для любой функции f.

Утверждение почти очевидно: поскольку наборы B_1 и B_2 полны, то каждая функция одного из наборов может быть вычислена какой-то схемой, составленной из элементов другого набора. Теперь можно взять в качестве C наибольший размер таких схем, и неравенства будут выполняться: каждую строку программы можно заменить на C (или меньше) строк с использованием функций другого набора.

Что можно сказать о сложности произвольной булевой функции n аргументов? Следующая теорема показывает, что она экспоненциально зависит от n (для "наугад взятой"функции).

Теорема 8. (а) Пусть c>2. Тогда сложность любой булевой функции n аргументов не превосходит c^n для всех достаточно больших n. (б) Пусть c<2. Тогда сложность большинства булевых функций n аргументов не меньше c^n для всех достаточно больших n.

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

Первое утверждение теоремы очевидно: размер схемы, реализующей дизъюнктивную нормальную форму с n переменными, есть O(n2^n), поскольку имеется не более 2^n конъюнктов размера O(n). (Напомним смысл O -обозначений: O(n2^n) означает, что существует верхняя оценка вида Cn2^n для некоторой константы C.) Осталось заметить, что O(n2^n)<c^n при достаточно больших n (напомним, что c>2 ).

Чтобы доказать второе утверждение, оценим число различных схем (скажем, в базисе И, ИЛИ, НЕ) размера N с n аргументами. Каждая такая схема может быть описана последовательностью из N присваиваний, выражающих одну из переменных через предыдущие. Для каждого присваивания есть не более 3(N+n)^2 вариантов (три типа операций — конъюнкция, дизъюнкция, отрицание, и каждый из не более чем двух аргументов выбирается среди не более чем N+n вариантов). Отсюда легко получить оценку 2^{O(N\log N)} на число всех функций сложности не более N (считая N\ge n ).

Всего булевых функций с n аргументами имеется 2^{2^n}. Из сравнения этих формул видно, что что при c<2 и при достаточно больших n булевы функции сложности меньше c^n составляют меньшинство, так как 2^{O(c^n\log c^n)} много меньше 2^{2^n}.

12. Проведите вторую часть рассуждения более подробно и покажите, что при некотором {\varepsilon>0} сложность большинства булевых функций с n аргументами не меньше \varepsilon2^n/n.

Верхнюю оценку в теореме 8 можно усилить и показать, что сложность любой булевой функции n аргументов не превосходит O(2^n/n).

13. (a) Покажите, что можно построить схему размера O(2^m) с 2^m выходами, реализующую все 2^m возможных конъюнктов длины m (для каждого— свой выход). (Указание: такую схему можно построить индуктивно.) (б) Покажите, что можно построить схему размера O(2^{2^m}) с 2^{2^m} выходами, реализующую все 2^{2^m} булевых функций m аргументов. (Указание: эту схему также можно построить индуктивно.) (в) Пусть \varphi(x_1,\dots,x_k,y_1,\dots,y_l)булева функция, аргументы которой разбиты на две группы. Покажите, что ее можно записать в виде дизъюнкции 2^k членов, каждый из которых имеет вид C(x_1,\dots,x_k)\hm\land
D(y_1,\dots,y_l), где C — конъюнкт, а D — произвольная булева функция. Вывести отсюда упомянутую выше оценку O(2^n/n). (Указание: разумно положить k\hm={n\hm-\log
n+c}, l\hm={\log n-c}. См. также [9] и [33].)

Теорема 8, однако, ничего не говорит о сложности конкретных булевых функций. Ситуация здесь такова. Есть разнообразные методы и приемы получения верхних оценок. Но про нижние оценки неизвестно практически ничего. Про многие функции мы подозреваем, что их сложность велика (экспоненциально зависит от числа входов), но доказать это пока не удается. Весьма нетривиальные идеи позволяют доказывать экспоненциальные нижние оценки для некоторых специальных классов схем, например, схем из монотонных элементов или схем ограниченной глубины (использующих элементы И и ИЛИ с произвольным числом входов). Получение экспоненциальных оценок для более общих схем — один из возможных подходов к знаменитой проблеме перебора, центральной проблеме теории сложности вычислений.

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

Рассмотрим функцию сравнения двух n -битовых чисел. Она имеет 2n аргументов ( n для одного числа и n для другого); ее значение равно 1, если первое число больше второго, и 0 в противном случае.

Обозначим эту функцию \comp_n.

Теорема 9. Пусть B — полный набор функций. Существует такая константа C, что \size_B(\comp_n)\hm\le Cn.

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

Схема сравнения чисел будет рекурсивной (чтобы сравнить два числа, мы отдельно сравниваем их левые и правые половины, а затем объединяем результаты). При этом, как часто бывает, надо усилить утверждение, чтобы индукция прошла. А именно, мы будем строить схему с 2n входами x_1,\dots,x_n,y_1,\dots,y_n и двумя выходами, которая указывает, какой из трех случаев x<y, x=y или x>y имеет место. (Здесь x,y — числа, записываемое в двоичной системе как x_1\dots x_n и y_1,\dots,y_n.) Два выходных бита кодируют четыре возможности, а нужно только три, так что есть некоторый запас. Для определенности можно считать, что первый выходной бит истинен, если числа равны, а второй — если x<y. Тогда возможны три варианта сигналов на выходе: 10 (равенство), 01 (при x<y ) и 00 (при x\hm>y).

Объясним теперь, как собрать, скажем, схему сравнения двух 16 -разрядных чисел. Соберем отдельно схему сравнения старших 8 разрядов и младших 8 разрядов. Каждая из них даст ответ в форме двух битов. Теперь из этих четырех битов надо собрать два. (Если в старших разрядах неравенство, то оно определяет результат сравнения; если старшие разряды равны, то результат сравнения определяется младшими разрядами.) Написанная в скобках фраза определяет булеву функцию с четырьмя битами на входе и двумя битами на выходе, и может быть реализована некоторой схемой фиксированного размера. Таким образом, если через T(n) обозначить размер схемы, сравнивающей n -битовые числа, то получаем оценку T(2n)\le 2T(n)+c, где c — некоторая константа, зависящая от выбора базиса. Отсюда следует, что T(2^k)\le c'2^k при некотором c'. Всамом деле, для достаточно большого c' можно доказать по индукции, что T(2^k) \le c'2^k - c (мы должны усилить неравенство, вычтя из правой части c, чтобы индуктивный шаг прошел; база индукции остается верной, если c' достаточно велико).

Ту же самую оценку можно объяснить и наглядно. Наша схема имеет вид иерархического дерева. На каждом уровне из двух двухбитовых сигналов получается один. Остается вспомнить, что в полном двоичном дереве число внутренних вершин (которое определяет размер схемы) на единицу меньше числа листьев. (В турнире по олимпийской системе число игр на единицу меньше числа команд, так как после каждой игры одна команда выбывает.)

Все внутренние вершины и все листья (где сравниваются два бита) представляют собой схемы ограниченного размера, откуда и вытекает оценка T(2^k)\hm\le c'2^k.

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

Перейдем к сложению двух n -разрядных чисел. (Строго говоря, тут возникает не булева функция, а функция \bbB^n\times\bbB^n\to\bbB^{n+1}, но все наши определения очевидно переносятся на этот случай.)

< Лекция 1 || Лекция 2: 12345 || Лекция 3 >