Divide and Conquer - Maximun subarray === ## Divide and Conquer: 1. 先將問題切成很多相同的子問題。(Divide) 2. 解決每個子問題。(Divide) 3. 合併每個解。(Conquer) ## Maximun subarray(pseudocode) ```pseudocode= FIND-MAX-CROSS-SUBARRAY(A, low, mid, high) left-sum = -inf sum = 0 for i = mid downto low sum = sum + A[i] if(sum > left-sum) left-sum = sum max-left = i right-sum = -inf sum = 0 for j = mid + 1 to high sum = sum + A[i] if(sum > right-sum) right-sum = sum max-right = j return (max-left, max-right, left-sum + right-sum) ``` ```pseudocode= FIND-MAXIMUN-SUBARRAY(A, low, high) if high==low return (low, high, A[low]) else mid = [(low+high)/2] // find max left-sum (left-low, left-high, left-sum) = FIND-MAXIMUN-SUBARRAY(A, low, mid) // find max right-sum (right-low, right-high, right-sum) = FIND-MAXIMUN-SUBARRAY(A, mid + 1, high) // find max cross-sum (cross-low, cross-high, cross-sum) = FIND-MAX-CROSS-SUBARRAY(A, low, mid, high) if left-sum >= right-sum and left-sum >= cross_sum return (left-low, left-htgh, left-sum) else right-sum >= left-sum and right-sum >= cross-sum return (right-low, right-high, right-sum) return (cross-low, cross-high, cross-sum) ```