美文网首页
求最大子列和问题 在线处理法(动态规划法)

求最大子列和问题 在线处理法(动态规划法)

作者: 周末的游戏之旅 | 来源:发表于2019-08-01 09:41 被阅读0次

基本思想:

当当前最大子列和为负数时,抛弃当前子列和(置为0)因为一个负数与后面的数相加只会使这个和更小,否则加上一个数,再进行判断,若为负数则抛弃,若比当前最大子列和大则更新当前子列和

举例说明,假如当前有

-1,3,-2,4,-6,1,6,-1 求最大子列和

第一次子列为-1, 当前子列和为-1 抛弃 最大子列和为0

第二次为3,子列和为3 更新 最大子列和为3

第三次为3-2=1, 子列和为1 什么也不做 最大子列和为3

第四次为1+4=5,子列和为5 更新 最大子列和为5

第五次为5-6=-1,子列和为-1 抛弃 最大子列和为0

第六次为-1+6=5,子列和为5 更新 最大子列和为5

第七次为5-1=4,子列和为4 什么也不做 最大子列和为5

‘在线’的意思是指每输入一个数据就进行即时处理,在任何一个地方中止输入,算法都能正确给出当前的解

int MaxSubseqSum4(int A[],int N){
    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;
}

因为只有一层for循环,所以时间复杂度为T(N)=O(N),效率非常高

相关文章

  • 求最大子列和问题 在线处理法(动态规划法)

    基本思想: 当当前最大子列和为负数时,抛弃当前子列和(置为0)因为一个负数与后面的数相加只会使这个和更小,否则加上...

  • 求最大子列和

  • 求最大子列和

    第一种:最简单的解法:把所有子列都算一遍找到最大的 第二种:采用分治法,运用递归来解决。(使用了分治一般O(N2)...

  • 求最大子列和问题 分治法

    分治法思想: 递归计算前半部分的最大子列和,递归计算后半部分的最大子列和,然后计算跨前后两个区域的最大子列和,这三...

  • 求最大子列和问题 优化算法

    先看一下前面的传统算法: 时间复杂度为:T(N)=O(N^3),显然该算法虽然简单易懂,但是时间复杂度太高。 分析...

  • 最大子序列解析

    最大子列和问题 给定N个整数的序列{A1, A2 ... An},求函数 f(i, j) = max{0, 从i到...

  • 求最大子列和算法

  • 最大子列和问题

    今天来讨论一个很基础的算法问题,数列的最大子列和问题。这道题我是在看浙大陈姥姥的Mooc的时候看到的,算是陈越老师...

  • 最大子列和问题

    题目描述: 给定KK个整数组成的序列{ N_1N​1​​, N_2N​2​​, ..., N_KN​K​​ },“...

  • 最大子列和问题

    给定K个整数组成的序列{ N​1​​, N​2​​, ..., N​K​​},“连续子列”被定义为{ N​i​​,...

网友评论

      本文标题:求最大子列和问题 在线处理法(动态规划法)

      本文链接:https://www.haomeiwen.com/subject/nwwfdctx.html