Схемы из функциональных элементов
Теорема 10. Существует схема размера , осуществляющая сложение
двух
-битовых чисел.
Напомним смысл обозначения : нам надо построить
схему сложения
-битовых чисел, имеющую размер не
более
для некоторого
и для
всех
.
Вспомним, как складывают числа в столбик:





Заметим, что теорему 9 легко вывести из
теоремы 10: чтобы сравнить числа и
, сложим число
(то есть число
, в котором все
единицы заменены нулями и наоборот) и число
. Если в старшем
разряде появится единица, то
, а если нет, то
.
Остается заметить, что и сложение, и обращение битов в числе
требуют схем линейного размера. Таким образом, сравнение чисел
сводится к вычислению бита переноса. Верно и обратное:
вычисление бита переноса сводится к сравнению двух чисел
(обратим в одном из слагаемых все биты).
Тем не менее конструкция, использованная при доказательстве
теоремы 9, имеет некоторые преимущества. Назовем глубиной схемы максимальное число
элементов на пути от входа к выходу. Если представить себе, что
сигнал на выходе элемента появляется не сразу после подачи
сигналов на входы, а с некоторой задержкой, то глубина схемы
определяет суммарную задержку. Легко понять, что рекурсивная
схема сравнения имела глубину (число уровней
пропорционально логарифму размера входа), в то время как
построенная только что схема сложения имеет глубину,
пропорциональную
(биты переноса вычисляются последовательно,
справа налево). Но можно соединить эти два результата:
Теорема 11. Существует схема сложения двух -битовых чисел размера
и глубины
.
Как мы видели, проблема в том, что биты переноса вычисляются
последовательно, а не параллельно. Если удастся их все
вычислить схемой размера и глубины
,
то дальнейшее очевидно.
Как мы упоминали, вычисление битов переноса равносильно
сравнению, так что для доказательства теоремы достаточно
научиться сравнивать параллельно все "суффиксы"двух -битовых
чисел
и
, т. е. для
каждого
сравнить числа
и
.
Вспомним, что мы делали при сравнении чисел (скажем, длины ).
На нижнем уровне мы сравнивали биты:



















В общем случае картина такая: после "сужающегося дерева"
мы строим "расширяющееся"; за шагов до конца мы знаем
результаты сравнения всех суффиксов, длины которых кратны
.
Это дерево имеет размер
и глубину
,
что завершает доказательство.
14. Покажите, что вычитание двух -битовых чисел по модулю
выполняется схемой размера
и глубины
.
(Указание: вычитание легко сводится к сложению, если заменить нули на единицы и наоборот.)
Теперь займемся умножением. Схема умножения двух -разрядных
чисел имеет
входов (по
для каждого множителя) и
выходов для произведения.
Посмотрим, какие оценки дает обычный способ умножения чисел
столбиком. В нем умножение двух -разрядных чисел сводится к
сложению
копий первого числа (частично замененных на нули в
зависимости от цифр второго числа) со сдвигами.
Получение этих копий требует схемы размера (общее число
цифр в копиях) и глубины
. Сложение двух
-разрядных
чисел мы можем выполнить с помощью схемы размера
и
глубины
, так что необходимые
сложений
можно выполнить схемой размера
и глубины
(если
складывать сначала попарно, потом результаты снова попарно и т. д.).
Оказывается, этот результат можно улучшить. Наиболее
экономные способы основаны на преобразовании Фурье (о них можно
прочесть в книге [1]). С их
помощью, например, можно построить схему умножения
-битовых
чисел, имеющую размер
.
Эти методы далеко выходят за рамки нашего обсуждения, но два улучшения мы приведем.
Теорема 12. Существует схема умножения двух -разрядных
чисел размера
и глубины
.
Как мы уже говорили, умножение двух -разрядных чисел
сводится к сложению
таких чисел, и остается выполнить такое
сложение схемой размера
и глубины
.
Ключевым моментом здесь является сведение сложения трех чисел к сложению
двух с помощью простой схемы размера
и
глубины
. В самом деле, пусть есть три числа
,
и
. Если мы будем складывать отдельно в каждом разряде, то в разряде может
накопиться любая сумма от
до
, то есть в двоичной
записи от
до
. Сформируем из младших битов этих
двухбитовых сумм число
, а из старших (сдвинутых влево) — число
. Тогда, очевидно,
. Получение цифр числа
и
происходит параллельно во всех разрядах и требует размера
и глубины
.
Теперь, если надо сложить чисел, можно разбить их на тройки
и из каждых трех чисел получить по два. В следующий круг, таким
образом, выйдут
чисел (примерно — граничные эффекты
большой роли не играют). Их снова можно сгруппировать по тройкам и т. д.
С каждым уровнем число слагаемых убывает в полтора раза,
так что глубина схемы будет логарифмической. Каждое
преобразование трех слагаемых в два требует схемы размера
и уменьшает число слагаемых на единицу, так что потребуется
таких преобразований. Итак, эта конструкция имеет общий размер
и глубину
. Надо только отметить,
что в конце у нас получается не одно число, а два, и их напоследок
надо сложить — что мы умеем делать с глубиной
и
размером
.
15. Докажите, что схема, вычисляющая булеву функцию от
аргументов, у которой ни один аргумент не является фиктивным,
имеет размер не менее
и глубину не менее
,
где
— некоторая константа, зависящая от выбранного набора
элементов. (Аргумент функции называют фиктивным, если от него значение функции не зависит.)
Эта задача показывает, что если в процессе умножения двух -разрядных
чисел мы суммируем
слагаемых размера
,
то оценки
для размера и
для глубины,
полученные при доказательстве теоремы 12, существенно улучшить нельзя.
Однако никто не обязывает нас следовать традиционному способу умножения столбиком — отказавшись от него, мы можем уменьшить размер схемы.