数据结构之多项式最大子列和问题(学习笔记)

问题描述:

给定N个整数的序列{a1,a2,...,an},求函数 的最大值

问题解决:

1.正规的遍历

int MaxSubseqSum1( int A[], intN )
{ 
    int ThisSum, MaxSum = 0;
    int i, j, k;
    for( i = 0; i < N; i++ ) { /* i是子列左端位置*/
        for( j = i; j < N; j++ ) { /* j是子列右端位置*/
            ThisSum = 0; /* ThisSum是从A[i]到A[j]的子列和*/
            for( k = i; k <= j; k++ )
                ThisSum += A[k];
                if( ThisSum > MaxSum ) /* 如果刚得到的这个子列和更大*/
                    MaxSum = ThisSum;  /* 则更新结果*/
        } /* j循环结束*/
    } /* i循环结束*/
    return MaxSum;
}                         // T( N) = O( N3 )

2.分而治之

3.在线处理

int MaxSubseqSum4( int A[], intN )
{ 
    int ThisSum, MaxSum;
    int i;
    ThisSum = MaxSum = 0;
    for( i = 0; i < N; i++ ) {
        ThisSum += A[i]; /* 向右累加*/
        if( ThisSum > MaxSum )
            MaxSum = ThisSum; /* 发现更大和则更新当前结果*/
        else if( ThisSum < 0 ) /* 如果当前子列和为负*/
            ThisSum = 0; /* 则不可能使后面的部分和增大,抛弃之*/
        }
    return MaxSum;
}  T( N) = O( N)
  • 在线”的意思是指每输入一个数据就进行即时处理,在任何一个地方中止输入,算法都能正确给出当前的解。
posted @ 2014-12-18 16:21  zyh_think  阅读(198)  评论(0编辑  收藏  举报