分治策略

来源:互联网 发布:gpa标准加权算法 编辑:程序博客网 时间:2024/06/05 07:24

最大子数组问题
FIND-MAX-CROSSING-SUBARRAY(A,low,mid,high)
//查找跨越中点的最大子数组

left-sum=-∞sum=0for i=mid downto low    sum=sum+A[i]    if sum>left-sum         //依次向左求和,并与左边所求得最大值比较    left-sum=sum        max-left=i                  //返回已求得最大数组的左下标right-sum=-∞sum=0for j=mid+1 to high     sum=sum+A[j]    if sum>right-sum    right-sum=sum     max-right=jreturn (max-left,max-right,left-sum+right-sum) 使用分治法求最大数组问题FIND—MAXIMUM-SUBARRAY(A,low,high)if high=low     return(low,high,A[low])  //仅有一个元素的情况else mid=⌊(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-MAX-CROSSING-SUBARRAY(A,low,mid,high)-   if left-sum>=right-sum and left-sum>=cross-sum        return(left-low,left-high,left-sum)    elseif right-sum>=left-sum and right-sum>=cross-sum        return(right-low,right-high,right-sum)    else return(cross-low,cross-high,cross-sum)
0 0
原创粉丝点击