最大字数组问题
假定你获得了投资挥发性化学公司的机会,与其生产的化学制品一样,这家公司的股票价格也是不稳定的。你被准许可以在某个时刻买进公司的股票。并在之后某个日期可以卖出公司的股票。买进卖出都是在当天的交易结束后进行。求怎么实现交易的收益最大化。
【暴力求解】
我们很容易设计一个暴力求解方法来解决本问题:简单地尝试对可能的买进卖出的日期组合,只要卖出日期在买入日期之后,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)
浙公网安备 33010602011771号