最大字数组问题

假定你获得了投资挥发性化学公司的机会,与其生产的化学制品一样,这家公司的股票价格也是不稳定的。你被准许可以在某个时刻买进公司的股票。并在之后某个日期可以卖出公司的股票。买进卖出都是在当天的交易结束后进行。求怎么实现交易的收益最大化。

 

【暴力求解】

我们很容易设计一个暴力求解方法来解决本问题:简单地尝试对可能的买进卖出的日期组合,只要卖出日期在买入日期之后,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)

  

 

posted @ 2015-07-09 08:59  b13272012771  阅读(193)  评论(0编辑  收藏  举报