# Fast multiplication algorithm Flashcards

*Which assumption of Carl Friedrich Gaus helped reduced the time complexity of numbers multiplication, and how?*

He noticed that in order to multiply two complex numbers:

(a + bi)(c + di) = ac - bd + (bc + ad)i

it is possible to have only three multiplications:

ac, bd and (a + b)(c + d), since

bc + ad = (a + b)(c + d) - ac - bd

It helps because x * y can be written as in the image attached.

Explain why the run time is T(n) = 3T(n/2) + O(n)

and why is it O(n^1.59)

Computing 2^n/2 and comuting the additions takes O(n).

and having 3 multiplication on n/2 bits numbers results with:

T(n) = 3T(n/2) + O(n)

the depth of the tree is log_2(3). so we have:

O(n^log_2(3)) = O(n^1.59)

*Why the naive recursive algorithm for matrix multiplication takes T(n) = 8T(n/2) + O(n^2)*

We can see that there are 8 mul operations of size n/2 and 4 addition of n^2/4-size bit numbers.

What is the big buzz around Strassen’s algorithm?

He managed to have a matrix multiplication recursion with only 7 multiplication calls. Thus reducting the time to O(n^log_2(7))