MaxSubsequence(A)
- maxSum <- 0
- for startPos <- 0 to A.size()-1 do
- for sequenceLength <- 0 to A.size()-1-startPos do
- thisSum <- 0
- for i<- startPos to sequenceLength do
- thisSum <- thisSum + A[i]
- if thisSum > maxSum
- maxSum <- thisSum
- return maxSum
MaxSubsequence(A,start, stop)
- if start = stop
- if A[start] > 0
- return A[start]
- else
- return 0
- center <- (start+stop) /2
- leftSum <- MaxSubsequence (A, start, center)
- rightSum <- MaxSubsequence(A, center+1, stop)
- leftPartialSum <- 0
- leftMaxSum <- 0
- for i <- center to start do
- leftPartialSum < leftPartialSum + A[i]
- if leftPartialSum > leftMaxSum
- leftMaxSum = leftPartialSum
- rightPartialSum <- 0
- rightMaxSum <- 0
- for i <- center to stop do
- rightPartialSum < rightPartialSum + A[i]
- if rightPartialSum > rightMaxSum
- rightMaxSum = rightPartialSum
- middleSum <- rightMaxSum + leftMaxSum
- return max(middleSum, leftSum, rightSum)
T(n) = 2T(n/2) + cn ^ ^ | + from lines 11-20 + from lines 7 and 8 T(n/2) = 2T(n/2/2) + cn 2T(n/22) + cn/2 T(n) = 2(2T(n/22) + cn/2 ) + cn = 22T(n/22) + 2cn at step i T(n) = 2iT(n/2i) + icn assume n=2k, or k=lg(n) T(n) = 2kT(2k/2k) + kcn T(n) = 2kT(1)+ cnk = c lg(n) + c n lg(n) Which is O(n lg(n))
MaxSubsequence(A)
- maxSum <- 0
- thisSum <- 0
- for i <- 0 to size do
- thisSum <- thisSum + A[i]
- if thisSum > maxSum
- maxSum <- thisSum
- if thisSum < 0
- thisSum <- 0
- return maxSum