zoukankan      html  css  js  c++  java
  • 数据结构之多项式最大子列和问题(学习笔记)

    问题描述:

    给定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)
    
    • 在线”的意思是指每输入一个数据就进行即时处理,在任何一个地方中止输入,算法都能正确给出当前的解。
  • 相关阅读:
    桥接模式
    单例模式
    迭代器模式
    组合模式
    备忘录模式
    适配器模式
    状态模式
    观察者模式
    golang 字符串统计
    go bytes缓冲区使用介绍 -转自https://www.cnblogs.com/--xiaoyao--/p/5122138.html
  • 原文地址:https://www.cnblogs.com/zjzyh/p/4172026.html
Copyright © 2011-2022 走看看