Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I would like to know how fast a matrix of integers can be multiplied by another matrix of integers. My motivation is because I've got a few ideas that seem to make the multiplication possible in around $O(n^2)$, but maybe this has already been accomplished somewhere else. Most likely I've made a zillion errors or this has been done already... I guess I'd like to know the best methods available, such as Strassen's algorithm.

share|cite|improve this question
up vote 6 down vote accepted

The best known algorithm is Coppersmith-Winograd, which runs in time $O(n^{2.376})$. It is believed, however, that for every $\epsilon > 0$ there is an algorithm that runs in time $O(n^{2+\epsilon})$. There is an $\Omega(n^2\log n)$ lower bound by Ran Raz for (arithmetic) circuit complexity with some restrictions on the circuit.

It will be very surprising if there were an $O(n^2)$ algorithm. Today's asymptotically efficient algorithms are not only complicated, but also impractical. Even Strassen's is only marginally practical. It will thus be even more surprising if there is a simple, practical $O(n^2)$ algorithm.

Finally, I don't believe that the restriction to integers makes the problem fundamentally easier.

share|cite|improve this answer
"Even Strassen's is only marginally practical." - Emphasis on "marginally"... I don't think I've ever seen anything where using Strassen's made for better results... – J. M. Aug 11 '11 at 2:42

There is a newer O(n^2.373) algorithm, see Virginia Vassilevska Williams, "Breaking the Coppersmith-Winograd barrier": (published in 2014).

share|cite|improve this answer

I think the best known Is Coppersmith-Winograd ($O(n^{2.376})$). I think there is a very good presentation on lots of the material, too.

You should probably look over your algorithm a lot - I would be stunned if you had such an algorithm. What's the basic idea?

share|cite|improve this answer
I already know it's essentially wrong. The basic idea is to use polynomials or generating functions (I constantly waste time on them) to store information, and then the multiplication can be accomplished by multiplying together copies of the matrixes alongside two "root of unity" filters. This cancels out all extra data generated by the multiplication. However, to extract the information, too much time is required. The multiplication can be finished in $O(n^2)$ using modular arithmatic, though. – Matt Groff Aug 10 '11 at 21:19
@Matt: I don't understand. You say you can multiply the matrices by... multiplying the matrices? – Qiaochu Yuan Aug 10 '11 at 21:37
@Qiaochu: Sorry, I didn't get technical enough. I meant that the product is returned by using multiplication. It's a faulty algorithm - I forgot to look at enough coefficients. – Matt Groff Aug 27 '11 at 22:45

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.