Схемы из функциональных элементов
Теорема 13. Существует схема умножения двух -разрядных
чисел размера
и глубины
.
Начнем с такого замечания. Вычисляя произведение двух комплексных чисел
![(a+bi)(c+di)=(ac-bd)+(ad+bc)i](/sites/default/files/tex_cache/76790ef8d1d46e34df1af715ca5355ad.png)
![ac](/sites/default/files/tex_cache/e2075474294983e013ee4dd2201c7a73.png)
![bd](/sites/default/files/tex_cache/c419b06b4c6579b50ff05adb3b8424f1.png)
![(a+b)(c+d)](/sites/default/files/tex_cache/0e719723e7953d98657663f8faca28e8.png)
![ad+bc](/sites/default/files/tex_cache/96369d3bd34cbedc8b7bcc2dd68d2c6a.png)
![(a+b)(c+d)-ac-bd](/sites/default/files/tex_cache/66e0d455222ceb6f1e19f0b7a6e79f2a.png)
Аналогичный фокус можно проделать и для целых чисел. Разобьем -битовое число на две
-битовые части, то есть
представим его в виде
. Теперь запишем произведение двух таких чисел:
![(a2^n+b)(c2^n+d)=ac2^{2n}+(ad+bc)2^n+bd.](/sites/default/files/tex_cache/9bd7b0b33c7c2b874c63fddba2569bd8.png)
![ac](/sites/default/files/tex_cache/e2075474294983e013ee4dd2201c7a73.png)
![bd](/sites/default/files/tex_cache/c419b06b4c6579b50ff05adb3b8424f1.png)
![(a+b)(c+d)](/sites/default/files/tex_cache/0e719723e7953d98657663f8faca28e8.png)
![2n](/sites/default/files/tex_cache/21e2c0c0472b331622877accbe29b91b.png)
![n](/sites/default/files/tex_cache/7b8b965ad4bca0e41ab51de7b31363a1.png)
![(a+b)](/sites/default/files/tex_cache/0b59f24af1d7f3d0132d0ec0ea16a1f0.png)
![(c+d)](/sites/default/files/tex_cache/85ab1a31cddfe0b261c6f9d1dbcf4be6.png)
![(n+1)](/sites/default/files/tex_cache/06fc1a78b9aaaee997b0adbfa5992f6c.png)
Для размера схемы, таким образом, получается рекурсивная оценка
![S(2n)\le 3S(n)+O(n),](/sites/default/files/tex_cache/fe9a53eee0a71057fa499dc5eacc072c.png)
![S(n)=O(n^{\log_2 3})](/sites/default/files/tex_cache/7c000e2309c7824a839cc26de0902ed9.png)
![n](/sites/default/files/tex_cache/7b8b965ad4bca0e41ab51de7b31363a1.png)
![\log_2 n](/sites/default/files/tex_cache/6728eba779a6f39a9d12cbb243f96655.png)
![3](/sites/default/files/tex_cache/eccbc87e4b5ce2fe28308fd9f2a7baf3.png)
![2/3](/sites/default/files/tex_cache/c531884a343e0db77c17c7a33e1b7675.png)
![3^{\log_2 n}=n^{\log_2 3}](/sites/default/files/tex_cache/9ff1dcae7215c3d1b9b8c3a1d010b221.png)
Оценка глубины также очевидна: на каждом уровне мы имеем
схему сложения глубины , а число уровней есть
.
На этом мы завершаем знакомство со схемами из функциональных элементов, выполняющими арифметические операции. О них можно прочесть в главе 29 учебника Кормена, Лейзерсона и Ривеста [18] и в книге Ахо, Хопкрофта и Ульмана [1].
Рассмотрим теперь функцию "голосования"(majority).Она имеет
нечетное число аргументов, и значение ее равно или
в зависимости от того, какое из двух значений
чаще встречается среди входов.
Теорема 14. Существует схема размера и глубины
,
вычисляющая функцию голосования.
На самом деле можно даже вычислить общее число единиц среди
входов. Это делается рекурсивно: считаем отдельно для каждой
половины, потом складываем. Получается логарифмическое число
уровней. На верхнем уровне надо складывать числа размера , на следующем— размера
и так до самого
низа, где складываются однобитовые числа (то есть биты входа). Какой
средний размер складываемых чисел? Половина вершин в дереве
приходится на нижний уровень (числа длины
), четверть — на
следующий (числа длины
) и т. д. Вспоминая, что ряд
сходится, видим, что средний размер складываемых чисел
есть
и общий размер схемы есть
. А общая
глубина есть
, так как на каждом из
уровней стоит схема глубины
.
Заметим, что хотя функция голосования монотонна,
построенная схема ее вычисления содержит немонотонные элементы (поскольку операция
сложения не монотонна). Мы уже говорили, что всякую монотонную
функцию можно составить из конъюнкций и дизъюнкций. Для функции
голосования есть очевидный способ это сделать: написать
дизъюнкцию всех конъюнкций размера (напомним, что число
входов
предполагается нечетным). Однако при этом получится
схема экспоненциального по
размера.
Теорема 15. Существует схема размера и глубины
,
составленная только из элементов И и ИЛИ (с двумя входами), вычисляющая функцию голосования.
Для начала заметим, что ограничение на размер
является следствием ограничения на глубину, так как элементы И и
ИЛИ имеют только два входа и число элементов в схеме глубины
есть
.
Схема будет строиться из элементов большинства с тремя входами.
(Каждый из них можно собрать из конъюнкций и дизъюнкций по
формуле .)
Выход схемы будет большинством из трех значений,
каждое из которых есть большинство из трех значений и т. д.
(рис. 2.3).
Продолжая эту конструкцию на уровнях, мы получим схему с
входами. (Отметим, что эта схема не будет вычислять
большинство среди своих входов — по той же причине, по которой
результат непрямого голосования может отличаться от мнения
большинства.) Но мы сделаем вот какую странную вещь: возьмем
равным
при достаточно большом коэффициенте
пропорциональности
(при этом число входов такой схемы будет
полиномиально зависеть от
) и напишем на входах случайно
выбранные переменные из данного нам набора
.
(Переменные, записываемые на разных входах, выбираются
независимо.) Оказывается, что с ненулевой вероятностью эта схема
будет вычислять функцию большинства среди
,
если константа
достаточно велика. Следовательно, искомая схема существует.
Обратите внимание: нам удастся доказать существование интересующей нас схемы, не предъявив ее явно. (Такое использование вероятностных методов в комбинаторных рассуждениях часто бывает полезно.)
Итак, почему же схема с положительной вероятностью вычисляет
функцию большинства? Это доказывается так: рассмотрим какой-то
один набор значений на входах и
докажем, что на этом конкретном наборе случайная схема
выдает правильный ответ с вероятностью, очень близкой к единице
(равной при очень малом
).
Если число настолько мало, что остается меньшим
единицы даже после умножения на число возможных входов (
),
то получаем требуемое (каждое из
событий имеет вероятность
не меньше
, значит их пересечение имеет
вероятность не меньше
).
Итак, осталось оценить вероятность того, что случайная схема
даст правильный ответ на данном входе. Пусть доля единиц среди
всех входов равна . Тогда на каждый входной провод схемы
подается единица с вероятностью
и нуль с вероятностью
(выбор случайной переменной дает единицу с вероятностью
),
причем сигналы на всех входах независимы.
Если на трех входах элемента -большинства сигналы независимы,
и вероятность появления единицы на каждом входе есть
, то
вероятность появления единицы на выходе есть
. На следующих уровнях
вероятность появления единицы будет равна
График
функции
на отрезке
(рис. 2.4) показывает, что
при итерациях функции
дисбаланс (отклонение от середины) нарастает и
последовательность стремится к краю отрезка. Надо только оценить число шагов.
Если вначале единицы составляют большинство из аргументов
(напомним,
нечетно), то их как минимум
,
так что
. Таким образом, начальный
дисбаланс составляет как минимум
. А в конце нам нужно
приблизиться к краю отрезка на расстояние
.
Итак, нам осталось доказать такую лемму (относящуюся скорее к математическому анализу):