Matrix Multiplication using Divide and Conquer
In this article, we will review Matrix Multiplication using Divide and Conquer along with the conventional method. We will also compare the performance of both methods.
Conventional Approach
Matrix multiplication is an important operation in many mathematical and image processing applications. Suppose we want to multiply two matrices A and B, each of size n x n, multiplication is operation is defined as
C11 = A11 B11 + A12 B21
C12 = A11 B12 + A12 B22
C21 = A21 B11 + A22 B21
C22 = A21 B12 + A22 B22
This approach is very costly as it required 8 multiplications and 4 additions.
Algorithm
Algorithm MATRIX_MULTIPLICATION(A, B, C)
// A and B are input matrices of size n x n
// C is the output matrix of size n x n
for i ← 1 to n do
for j ← 1 to n do
C[i][j] ← 0
for k ← 1 to n do
C[i][j] ← C[i][j] + A[i][k]*B[k][j]
end
end
end
Complexity Analysis
The innermost statement is enclosed within three for loops. That statement runs in constant time, i.e. in O(1) time. Running time of algorithm would be,
Running time of this algorithm is cubic, i.e. O(n3)
Matrix Multiplication using Strassen’s Method
Strassen suggested a divide and conquer strategy-based matrix multiplication technique that requires fewer multiplications than the traditional method. The multiplication operation is defined as follows using Strassen’s method:
C11 = S1 + S4 – S5 + S7
C12 = S3 + S5
C21 = S2 + S4
C22 = S1 + S3 – S2 + S6
Where,
S1 = (A11 + A22) * (B11 + B22)
S2 = (A21 + A22) * B11
S3 = A11 * (B12 – B22)
S4 = A22 * (B21 – B11)
S5 = (A11 + A12) * B22
S6 = (A21 – A11) * (B11 + B12)
S7 = (A12 – A22) * (B21 + B22)
Let us check if it is same as the conventional approach.
C12 = S3 + S5
= A11 * (B12 – B22) + (A11 + A12) * B22
= A11 * B12 – A11 * B22 + A11 * B22 + A12 * B22
= A11 * B12 + A12 * B22
This is same as C12 derived using conventional approach. Similarly we can derive all Cij for strassen’s matrix multiplication.
Algorithm
Algorithm STRESSEN_MAT_MUL (int *A, int *B, int *C, int n)
// A and B are input matrices
// C is the output matrix
// All matrices are of size n x n
if n == 1 then
*C = *C + (*A) * (*B)
else
STRESSEN_MAT_MUL (A, B, C, n/4)
STRESSEN_MAT_MUL (A, B + (n/4), C + (n/4), n/4)
STRESSEN_MAT_MUL (A + 2 * (n/4), B, C + 2 * (n/4), n/4)
STRESSEN_MAT_MUL (A + 2 * (n/4), B + (n/4), C + 3 * (n/4), n/4)
STRESSEN_MAT_MUL (A + (n/4), B + 2 * (n/4), C, n/4)
STRESSEN_MAT_MUL (A + (n/4), B + 3 * (n/4), C + (n/4), n/4)
STRESSEN_MAT_MUL (A + 3 * (n/4), B + 2 * (n/4), C + 2 * (n/4), n/4)
STRESSEN_MAT_MUL (A + 3 * (n/4), B + 3 * (n/4), C + 3 * (n/4), n/4)
end
Complexity Analysis of Matrix Multiplication using Divide and Conquer approach
The conventional approach performs eight multiplications to multiply two matrices of size 2 x 2. Whereas Strassen’s approach performs seven multiplications on the problem of size 1 x 1, which in turn finds the multiplication of 2 x 2 matrices using addition. In short, to solve the problem of size n, Strassen’s approach creates seven problems of size (n – 2). Recurrence equation for Strassen’s approach is given as,
T(n) = 7.T(n/2)
Two matrices of size 1 x 1 needs only one multiplication, so the base case would be, T (1) = 1. Let us find the solution using the iterative approach. By substituting n = (n / 2) in above equation,
T(n/2) = 7.T(n/4)
⇒ T(n) = 72.T(n/22)
.
.
.
T(n) = 7k.T(2k)
Let’s assume n = 2k ⇒ k = log2 n
T (n) = 7k .T(2k/2k)
= 7k .T (1)
= 7k
= 7log2 n
= nlog2 7
= n2.81 < n3
Thus, running time of Strassen’s matrix multiplication algorithm O(n2.81), which is less than cubic order of traditional approach. The difference between running time becomes significant when n is large.
Example of Matrix Multiplication using Divide and Conquer Approach
Problem: Multiply given two matrices A and B using Strassen’s approach, where
Solution:
let,
S1 = (A11 + A22) x (B11 + B22)
S2 = (A21 + A22) x B11
S3 = A11 x (B12 – B22)
S4 = A22 x (B21 – B11)
S5 = (A11 + A12) x B22
S6 = (A11 – A11) x (B11 + B12)
S7 = (A12 – A22) x (B21 + B22)
Some Popular Problems Solved using Divide and Conquer
- Linear Search
- Binary Search
- Convex Hull
- Max-Min Problem
- Larger Integer Multiplication
- Strassen’s Matrix Multiplication
- Finding Exponent Problem
- Merge Sort
- Quick Sort
Additional Reading: Intuitive explanation of the Strassen matrix multiplication