Матричный умножитель — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 15: Строка 15:
 
вначале мы суммируем <tex>m^{(0)}</tex> и <tex>m^{(1)}</tex>, саму сумму занесем в <tex>u^{(1)}</tex>, а переносы в <tex>v^{(1)}</tex>(в <tex>u^{(1)}</tex> и <tex>v^{(1)}</tex> будет не более n+1 битов в каждом), затем суммируем числа <tex>u^{(1)}</tex>, <tex>v^{(1)}</tex>, <tex>m^{(2)}</tex> и получаем <tex>u^{(2)}</tex>, <tex>v^{(2)}</tex>. Так суммируется <tex>u^{(i-1)}</tex>, <tex>v^{(i-1)}</tex>, <tex>m^{(i)}</tex> для всех i = 2, 3, … , n – 1. В итоге получаем два числа <tex>u^{(n-1)}</tex> и <tex>v^{(i-1)}</tex>, которые складываем с помощью [[двоичный каскадный сумматор|двоичного каскадного сумматора]].
 
вначале мы суммируем <tex>m^{(0)}</tex> и <tex>m^{(1)}</tex>, саму сумму занесем в <tex>u^{(1)}</tex>, а переносы в <tex>v^{(1)}</tex>(в <tex>u^{(1)}</tex> и <tex>v^{(1)}</tex> будет не более n+1 битов в каждом), затем суммируем числа <tex>u^{(1)}</tex>, <tex>v^{(1)}</tex>, <tex>m^{(2)}</tex> и получаем <tex>u^{(2)}</tex>, <tex>v^{(2)}</tex>. Так суммируется <tex>u^{(i-1)}</tex>, <tex>v^{(i-1)}</tex>, <tex>m^{(i)}</tex> для всех i = 2, 3, … , n – 1. В итоге получаем два числа <tex>u^{(n-1)}</tex> и <tex>v^{(i-1)}</tex>, которые складываем с помощью [[двоичный каскадный сумматор|двоичного каскадного сумматора]].
 
==Схемная сложность==
 
==Схемная сложность==
Частичные произведения вычисляются за n шагов, то есть имеют временную сложность O(n). Сложение с вычисление переносов включает n - 1 шагов и требует времени O(n). Последнее сложение можно выполнить за O(log n). <br>
+
Частичные произведения вычисляются за ''n'' шагов. Сложение с вычисление переносов включает ''n - 1'' шаг. Последнее сложение можно выполнить за ''O(log n)''. <br>
 
В итоге суммарное время работы: <br>
 
В итоге суммарное время работы: <br>
O(n) + O(n) + O(log n) = O(n) <br>
+
''O(n) + O(n) + O(log n) = O(n)'' <br>
Есть и более быстрые способы умножения двух чисел, например умножение с помощью [[дерево Уоллеса|дерева Уоллеса]], которое работает O(log n).
+
Есть и более быстрые способы умножения двух чисел, например умножение с помощью [[дерево Уоллеса|дерева Уоллеса]], которое работает ''O(log n)''.
  
 
== Литература ==
 
== Литература ==
  
 
* ''[http://ru.wikipedia.org/wiki/Кормен Кормен Т.], [http://ru.wikipedia.org/wiki/Лейзерсон,_Чарльз_Эрик Лейзерсон Ч.], [http://ru.wikipedia.org/wiki/Ривест,_Рональд_Линн Ривест Р.]''. Алгоритмы: построение и анализ = Introduction to Algorithms / Пер. с англ. под ред. А. Шеня. — М.: МЦНМО, 2000. — 960 с. — ISBN 5-900916-37-5
 
* ''[http://ru.wikipedia.org/wiki/Кормен Кормен Т.], [http://ru.wikipedia.org/wiki/Лейзерсон,_Чарльз_Эрик Лейзерсон Ч.], [http://ru.wikipedia.org/wiki/Ривест,_Рональд_Линн Ривест Р.]''. Алгоритмы: построение и анализ = Introduction to Algorithms / Пер. с англ. под ред. А. Шеня. — М.: МЦНМО, 2000. — 960 с. — ISBN 5-900916-37-5

Версия 20:35, 26 октября 2010

Определение

Матричный умножитель - цифровая схема, осуществляющяя умножение двух чисел.

Принцип работы

Матричный умножитель 1.png

Вычисление частичных произведений

Матричный умножитель вычисляет частичные произведения по формуле:
[math]m^{(i)} = a * b_i * 2^{i}[/math]

Суммирование частичных произведений

На этом этапе происходит сложение всех частичных произведений m. Это происходит так: вначале мы суммируем [math]m^{(0)}[/math] и [math]m^{(1)}[/math], саму сумму занесем в [math]u^{(1)}[/math], а переносы в [math]v^{(1)}[/math][math]u^{(1)}[/math] и [math]v^{(1)}[/math] будет не более n+1 битов в каждом), затем суммируем числа [math]u^{(1)}[/math], [math]v^{(1)}[/math], [math]m^{(2)}[/math] и получаем [math]u^{(2)}[/math], [math]v^{(2)}[/math]. Так суммируется [math]u^{(i-1)}[/math], [math]v^{(i-1)}[/math], [math]m^{(i)}[/math] для всех i = 2, 3, … , n – 1. В итоге получаем два числа [math]u^{(n-1)}[/math] и [math]v^{(i-1)}[/math], которые складываем с помощью двоичного каскадного сумматора.

Схемная сложность

Частичные произведения вычисляются за n шагов. Сложение с вычисление переносов включает n - 1 шаг. Последнее сложение можно выполнить за O(log n).
В итоге суммарное время работы:
O(n) + O(n) + O(log n) = O(n)
Есть и более быстрые способы умножения двух чисел, например умножение с помощью дерева Уоллеса, которое работает O(log n).

Литература