Произведение комплексных чисел, использующее только три умножения

мы делаем умножение комплексного числа следующим образом:

(a + i * b) * (c + i * d) = (a * c - b * d) + i * (a * d + b * c)

реальная и мнимая части результата являются

real part = (a * c - b * d)
imag part = (a * d + b * c)

Это включает в себя четыре реальных умножения. Как мы можем сделать это только с тремя реальными умножениями?

4 ответов


вас интересуют два номера : A=ac−bd и B=ad+bc. Вычислить три действительных умножения S1=ac,S2=bd, and S3=(a+b)(c+d). Теперь вы можете вычислить результаты A=S1−S2 и B=S3−S1−S2.

этот процесс называется умножением Карацубы и широко используется в алгоритмическом анализе.

Он используется для поиска ближайшей пары точек.


для полноты, я хотел бы отметить алгоритм комплексного умножения Гаусса, что является еще одним способом сделать сложное умножение только с тремя умножениями. Подводя итог, вы вычисляете

k1 = c * (a + b)
k2 = a * (d - c)
k3 = b * (c + d)
Real part = k1 - k3
Imaginary part = k1 + k2

некоторые алгоритмы, например,Split-radix FFT установите более высокие ожидания на сложное умножение, требующее сложности ровно 3 Реальных умножения и 3 Реальных сложения.

(a+ib)(c+id)=ac−bd+i(ad+bc)    

x=a(c−d)
y=a+b
z=a−b
ac-bd=zd+x
ad+bc=yc−x

в БПФ y и z полностью исходят из факторов twiddle, поэтому их можно предварительно вычислить и сохранить в таблице поиска. Таким образом, требование выполнено. БПФ трюки


Валлабх Патаде уже ответил о том, как выполнять произведение между двумя комплексными числами только с тремя вещественными умножениями. Применение Карацубаалгоритм действительно следующий

x = a + i * b;
y = c + i * d;

real(x * y) = a * c - b * d;
imag(x * y) = (a + b) * (c + d) - a * c - b * d;

теперь вопрос: можем ли мы выполнить произведение между двумя комплексными числами с меньше чем три реальных умножений?

ответ нет и виноград по теорема на

S. Winograd, "On the number of multiplications required to compute certain functions", Commun. Pure Appl. Math. 23 (1970), 165-179.

минимальное число умножений, требуемое при вычислении произведения между двумя комплексными числами, равно трем.