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