Дерево Уоллеса — различия между версиями
Rybak (обсуждение | вклад) (→Определение) |
Komarov (обсуждение | вклад) м (- → —) |
||
| Строка 26: | Строка 26: | ||
Для построения элемента <tex>3\to2</tex> нам потребуется элемент, который умеет складывать 3 бита и возвращать 2 бита результата. | Для построения элемента <tex>3\to2</tex> нам потребуется элемент, который умеет складывать 3 бита и возвращать 2 бита результата. | ||
| − | Основная идея реализации - отдельная обработка переносов и остатков. | + | Основная идея реализации {{---}} отдельная обработка переносов и остатков. |
Тогда первое число ответа <tex>a</tex> может быть получена так: | Тогда первое число ответа <tex>a</tex> может быть получена так: | ||
<tex>a_i = x_i \oplus y_i \oplus z_i</tex> , | <tex>a_i = x_i \oplus y_i \oplus z_i</tex> , | ||
| − | где <tex>x</tex>, <tex>y</tex> и <tex>z</tex> - входные числа, а <tex>x_i</tex>, <tex>y_i</tex> и <tex>z_i</tex> - соответствующие их <tex>i</tex>-е биты. | + | где <tex>x</tex>, <tex>y</tex> и <tex>z</tex> {{---}} входные числа, а <tex>x_i</tex>, <tex>y_i</tex> и <tex>z_i</tex> {{---}} соответствующие их <tex>i</tex>-е биты. |
Второе же число <tex>b</tex> можно получить так: | Второе же число <tex>b</tex> можно получить так: | ||
| Строка 37: | Строка 37: | ||
b_{i + 1} & = \langle x_i, y_i, z_i \rangle | b_{i + 1} & = \langle x_i, y_i, z_i \rangle | ||
\end{cases}</tex> , | \end{cases}</tex> , | ||
| − | где <tex>\langle x, y, z\rangle</tex> - функция медианы (она же "голосование 2 из 3"). С помощью этой функции считается перенос. | + | где <tex>\langle x, y, z\rangle</tex> {{---}} функция медианы (она же "голосование 2 из 3"). С помощью этой функции считается перенос. |
Очевидно, полученные числа <tex>a</tex> и <tex>b</tex> дадут в сумме <tex>x + y + z</tex> | Очевидно, полученные числа <tex>a</tex> и <tex>b</tex> дадут в сумме <tex>x + y + z</tex> | ||
Версия 08:47, 21 ноября 2010
Содержание
Определение
Дерево Уоллеса — схема для умножения двух чисел.
Принцип работы
Дерево Уоллеса
Для получения произведения, воспользуемся методом, напоминающим умножение «в столбик»: распишем произведение в сумму чисел (как в матричном умножителе).
Однако, в отличие от матричного умножителя, дерево Уоллеса складывает все числа не последовательно, а с помощью специального элемента(назовём его ), преобразующего 3 числа , и в числа и такие, что .
С помощью этого элемента на каждом шаге производятся следующие операции:
- Берутся тройки чисел , , . При этом какие-то числа могут остаться.
- Для каждой тройки применяется элемент .
- Повторяются пункты 1 и 2 пока не осталось 2 числа.
- Оставшиеся 2 числа складываются с помощью двоичного каскадного сумматора.
На выходе имеем число, которое равно сумме чисел на всех входах.
Элемент 3→2
Теперь о том, как устроен элемент .
Для построения элемента нам потребуется элемент, который умеет складывать 3 бита и возвращать 2 бита результата. Основная идея реализации — отдельная обработка переносов и остатков.
Тогда первое число ответа может быть получена так: , где , и — входные числа, а , и — соответствующие их -е биты.
Второе же число можно получить так: , где — функция медианы (она же "голосование 2 из 3"). С помощью этой функции считается перенос.
Очевидно, полученные числа и дадут в сумме
Схемная сложность
Определим схемную сложность этого элемента.
Каждый элемент имеет глубину и размер .
Подсчитаем количество элементов . На каждом шаге количество чисел, которые нужно просуммировать, уменьшается в раза. Тогда глубина дерева будет равна , и в нём будет элементов . Тогда общая сложность равна
Литература
- Т. Кормен, Ч. Лейзерсон, Р. Ривест: Алгоритмы: построение и анализ, 1-е изд