CLRS 4.2 Exercises

4.2-2  Write pseudocode for Strassen's algorithm

STRASSEN(A, B)
	n = A.rows
	let C be a new n*n matrices
	if n == 1
		C11 = a11*b11;
	else 
		partition A, B, P in equations 4.9
		S1 = B12 - B22
		S2 = A11 + A12
		S3 = A21 + A22
		S4 = B21 - B11
		S5 = A11 + A22
		S6 = B11 + B22
		S7 = A12 - A22
		S8 = B21 + B22
		S9 = A11 - A21
		S10 = B11 + B12
		
		//Recursive
		P1 = STRASSEN(A11, S1)
		P2 = STRASSEN(S2, B22)
		P3 = STRASSEN(S3, B11)
		P4 = STRASSEN(A22, S4)
		P5 = STRASSEN(S5, S6)
		P6 = STRASSEN(S7, S8)
		P7 = STRASSEN(S9, S10)
		
		C11 = P5 + P4 - P2 + P6
		C12 = P1 + P2
		C21 = P3 + P4
		C22 = P5 + P1 - P3 - P7
	
	return C



你可能感兴趣的:(CLRS-4.2)