最大字数组问题
假定你获得了投资挥发性化学公司的机会,与其生产的化学制品一样,这家公司的股票价格也是不稳定的。你被准许可以在某个时刻买进公司的股票。并在之后某个日期可以卖出公司的股票。买进卖出都是在当天的交易结束后进行。求怎么实现交易的收益最大化。
【暴力求解】
我们很容易设计一个暴力求解方法来解决本问题:简单地尝试对可能的买进卖出的日期组合,只要卖出日期在买入日期之后,N天中共有n(n-1)/2组合,而处理没对日期所花的时间也是常量,因此这种算法的运行时间为Ω(n*n)
【分治算法】
function FIND-MAXIMUM-SUBARRAY(A, low, high) if high==low return (low, high, A(low)) else mid = floor((low + high)/2) (left-low, left-high, left-sum) = FIND-MAXIMUM-SUBARRAY(A, low, ,mid) (right-low, right-high, right-sum) = FIND-MAXIMUM-SUBARRAY(A, mid+1, high) (cross-low, cross-high, cross-sum) = FIND-CROSSING-SUBARRAY(A, low, mid, high) if left-sum >= right-sum && right-sum >= cross-sum return (left-low, left-high, left-sum) elif right-sum >= left-sum && right-sum >= cross-sum return (right-low, right-high, right-sum) else return (cross-low, cross-high, cross-sum) function FIND-CROSSING-SUBARRAY(A, low, mid, high) left-sum = -9999 sum = 0 for i = mid downto low sum = sum + A[i] if sum > left-sum left-sum = sum max-left = i right-sum = -9999 sum = 0 for j = mid + 1 to high sum = sum + A[j] if sum > right-sum right-sum > sum max-right = j return (max-left, max-right,left-sum+right-sum)