Because matrix multiplication is such a central operation in many numerical algorithms, much work has been invested in making matrix multiplication algorithms efficient. Applications of matrix multiplication in computational problems are found in many fields including scientific computing and pattern recognition and in seemingly unrelated problems such as counting the paths through a graph. Many different algorithms have been designed for multiplying matrices on different types of hardware, including parallel and distributed systems, where the computational work is spread over multiple processors (perhaps over a network). Directly applying the mathematical definition of matrix multiplication gives an algorithm that takes time on the order of field operations to multiply two matrices over that field ( in big O notation). Better asymptotic bounds on the time required to multiply matrices have been known since the Strassen's algorithm in the 1960s, but the optimal time (that is, the computational complexity of matrix multiplication) remains unknown. , the best announced bound on the asymptotic complexity of a matrix multiplication algorithm is time, given by Duan, Wu and Zhou announced in a preprint. This improves on the bound of time, given by Josh Alman and Virginia Vassilevska Williams. However, this algorithm is a galactic algorithm because of the large constants and cannot be realized practically. Iterative algorithm The definition of matrix multiplication is that if for an matrix and an matrix , then is an matrix with entries From this, a simple algorithm can be constructed which loops over the indices from 1 through and from 1 through , computing the above using a nested loop: Input: matrices and Let be a new matrix of the appropriate size For from 1 to : For from 1 to : Let For from 1 to : Set Set Return This algorithm takes time (in asymptotic notation). A common simplification for the purpose of algorithms analysis is to assume that the inputs are all square matrices of size , in which case the running time is , i.e., cubic in the size of the dimension. Cache behavior The three loops in iterative matrix multiplication can be arbitrarily swapped with each other without an effect on correctness or asymptotic running time. However, the order can have a considerable impact on practical performance due to the memory access patterns and cache use of the algorithm; which order is best also depends on whether the matrices are stored in row-major order,