CS146
Chris Pollett
Feb 19, 2014
FIND-MAX-CROSSING-SUBARRAY(A, low, mid, high) 1 left-sum = -infinity 2 sum = 0 3 for i = mid downto low 4 sum = sum + A[i] 5 if sum > left-sum 6 left-sum = sum 7 max-left = i 8 right-sum = -infinity 9 sum = 0 10 for j = mid + 1 to high 11 sum = sum + A[j] 12 if sum > right-sum 13 right-sum = sum 14 max-right = j 15 return (max-left, max-right, left-sum + right-sum)
FIND-MAX-SUBARRAY(A, low, high) 1 if high == low 2 return (low, high, A[low]) // base case 3 else mid = floor(low+high/2) 4 (left-low, left-high, left-sum) = FIND-MAX-SUBARRAY(A, low, mid) 5 (right-low, right-high, right-sum) = FIND-MAX-SUBARRAY(A, mid + 1, high) 6 (cross-low, cross-high, cross-sum) = FIND-MAX-CROSSING-SUBARRAY(A, low, mid, high) 7 if left-sum >= right-sum and left-sum >= cross-sum 8 return (left-low, left-high, left-sum) 9 elseif right-sum >=left-sum and right-sum >= cross-sum 10 return (right-low, right-high, right-sum) 11 else return (cross-low, cross-high, cross-sum)
SQUARE-MATRIX-MULTIPLY-RECURSIVE(A,B) 1 n = A.rows 2 let C be a new n x n matrix //we use little a,b,c for individual entries, big A,B,C for submatrices as above 3 if n== 1 4 c[1,1] = a[1,1]*b[1,1] 5 else partition A, B, C as in the above equation 6 C[1, 1] = SQUARE-MATRIX-MULTIPLY-RECURSIVE(A[1,1],B[1,1]) + SQUARE-MATRIX-MULTIPLY-RECURSIVE(A[1,2],B[2,1]) 7 C[1, 2] = SQUARE-MATRIX-MULTIPLY-RECURSIVE(A[1,1],B[1,2]) + SQUARE-MATRIX-MULTIPLY-RECURSIVE(A[1,2],B[2,2]) 8 C[2, 1] = SQUARE-MATRIX-MULTIPLY-RECURSIVE(A[2,1],B[1,1]) + SQUARE-MATRIX-MULTIPLY-RECURSIVE(A[2,2],B[2,1]) 9 C[2, 2] = SQUARE-MATRIX-MULTIPLY-RECURSIVE(A[2,1],B[1,2]) + SQUARE-MATRIX-MULTIPLY-RECURSIVE(A[2,2],B[2,2]) 10 return C