0% found this document useful (0 votes)
88 views11 pages

Strassen Matrix Multiplication

Strassen matrix multiplication

Uploaded by

sgtrajkuppu123
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
88 views11 pages

Strassen Matrix Multiplication

Strassen matrix multiplication

Uploaded by

sgtrajkuppu123
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 11

Strassen's Matrix Multiplication

Sibel KIRMIZIGL

Basic Matrix Multiplication


Suppose we want to multiply two matrices of size N x N: for example A x B = C.

C11 = a11b11 + a12b21

C12 = a11b12 + a12b22


C21 = a21b11 + a22b21 C22 = a21b12 + a22b22
2x2 matrix multiplication can be accomplished in 8 multiplication.(2log28 =23)

Basic Matrix Multiplication


void matrix_mult (){ for (i = 1; i <= N; i++) { for (j = 1; j <= N; j++) { compute Ci,j; } }}

algorithm

Time analysis

Ci , j ai ,k bk , j
k 1

Thus T ( N ) c cN 3 O( N 3 )
i 1 j 1 k 1

Strassenss Matrix Multiplication


Strassen showed that 2x2 matrix multiplication can be accomplished in 7 multiplication and 18 additions or subtractions. .(2log27 =22.807) This reduce can be done by Divide and Conquer Approach.

Divide-and-Conquer
Divide-and conquer is a general algorithm design paradigm:

Divide: divide the input data S in two or more disjoint subsets S1, S2, Recur: solve the subproblems recursively Conquer: combine the solutions for S1, S2, , into a solution for S

The base case for the recursion are subproblems of constant size Analysis can be done using recurrence equations

Divide and Conquer Matrix Multiply


A
A0 A2 A1 A3


B0 B2

B
B1 B3

=
=

R
A0B0+A1B2 A2B0+A3B2 A0B1+A1B3 A2B1+A3B3

Divide matrices into sub-matrices: A0 , A1, A2 etc

Use blocked matrix multiply equations Recursively multiply sub-matrices

Divide and Conquer Matrix Multiply


A
a0

B
b0

= =

R
a0 b0

Terminate recursion with a simple base case

Strassenss Matrix Multiplication

P1 = (A11+ A22)(B11+B22) P2 = (A21 + A22) * B11 P3 = A11 * (B12 - B22) P4 = A22 * (B21 - B11) P5 = (A11 + A12) * B22 P6 = (A21 - A11) * (B11 + B12) P7 = (A12 - A22) * (B21 + B22)

C11 = P1 + P4 - P5 + P7 C12 = P3 + P5 C21 = P2 + P4 C22 = P1 + P3 - P2 + P6

Comparison
C11 = P1 + P4 - P5 + P7 = (A11+ A22)(B11+B22) + A22 * (B21 - B11) - (A11 + A12) * B22+ (A12 - A22) * (B21 + B22) = A11 B11 + A11 B22 + A22 B11 + A22 B22 + A22 B21 A22 B11 A11 B22 -A12 B22 + A12 B21 + A12 B22 A22 B21 A22 B22 = A11 B11 + A12 B21

Strassen Algorithm
void matmul(int *A, int *B, int *R, int n) { if (n == 1) { (*R) += (*A) * (*B); } else { matmul(A, B, R, n/4); matmul(A, B+(n/4), R+(n/4), n/4); matmul(A+2*(n/4), B, R+2*(n/4), n/4); matmul(A+2*(n/4), B+(n/4), R+3*(n/4), n/4); matmul(A+(n/4), B+2*(n/4), R, n/4); matmul(A+(n/4), B+3*(n/4), R+(n/4), n/4); matmul(A+3*(n/4), B+2*(n/4), R+2*(n/4), n/4); matmul(A+3*(n/4), B+3*(n/4), R+3*(n/4), n/4); }

Divide matrices in sub-matrices and recursively multiply sub-matrices

Time Analysis

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy