求最大子序列的算法

原创 2006年06月23日 08:46:00
问题:
给定一个序列,求它的一个连续子序列,使其值在所有子序列中最大,每个元素可以为负数。
    
分析:
用归纳法,当我们知道了(X1 X2… Xi-1)的最大序列后,那么加入Xi后会需要考虑两种情况:第一,原来的最大值不受影响;第二,包括Xi的后缀序列成了最大值,因此我们在遍历的过程中,需要保留这两个最大值。
                           
#include <stdio.h>
#include <stdlib.h>
     
double find_subserial(double x[],int n)
{
    double global_max = 0;                   //save the global max value
    double suffix_max = 0;                     //save the suffix max value
    int i;
    for(i=0;i<n;i++)
    {
        if( suffix_max + x[i] > global_max)
        {
            global_max = suffix_max = suffix_max + x[i];
        }
        else if( suffix_max + x[i] > 0 )
        {
            suffix_max = suffix_max+x[i];
        }
        else
        {
            suffix_max = 0;
        }
    }
    return global_max;
}
    
int main(int argc,char * argv[])
{
    double * temp;
    int i;
    temp = (double *)malloc( (argc-1) * sizeof(double) );
    for(i=1;i<argc;i++)
    {
        temp[i-1] = atof(argv[i]);
        printf("%g ",temp[i-1]);
    }
    printf("/n");
    printf("The max is %g /n",find_subserial(temp,argc-1));
    return 0;
}

最大子序列和的四种算法

1.穷举法 算法思想:算出每个子序列的和,即算出序列中第i个到第j个数的和(j>=i),并进行比较 算法: public static int maxSubSum1(int[] a) { in...
  • zzl913657644
  • zzl913657644
  • 2016年09月04日 13:37
  • 4685

【动态规划】最大子序列

描述:1.从给定序列中找出连续最大子序列,满足子序列的和为最大值,返回该最大值;      2.从给定序列中找出连续最大子序列,满足子序列的积为最大值,返回该最大值; 思想: 第一题首先申请一个...
  • stone_flower_rain
  • stone_flower_rain
  • 2015年08月17日 10:58
  • 695

求数组最大子序列的和

题目:给出数组{4,-3,5,-2,-1,2,6,-2},求子序列的最大和。分别用一下两种方法解决。#include // 方法1: 分治法 //时间复杂度 O(NlogN) int max3(i...
  • a253664942
  • a253664942
  • 2016年04月03日 18:55
  • 1533

【算法】最大子序列的四种算法

#include #include using namespace std; int Max_3(int a, int b, int c) //3个数中大 { if (a > b) { i...
  • roney123
  • roney123
  • 2016年01月27日 21:20
  • 206

求最大子序列和及其位置(四种经典方法)

算法部分 #include #include using namespace std; //http://blog.163.com/kevinlee_2010/blog/static/16982...
  • gukesdo
  • gukesdo
  • 2012年04月18日 09:31
  • 3518

利用递归求最大子序列

利用递归来求最大自序列,主要来源于 数据结构与算法分析 一书 对于一个序列A1,A2,…….An,求其最大自序列.利用普通的循环来做的话,所花费的时间有点大,便考虑用递归,但递归的缺点也很明显,用...
  • u011675745
  • u011675745
  • 2016年04月13日 23:05
  • 231

c实现 求一个数组中最大子序列的和 (两种方法)

||_ 题目描述||_ 分析 本题的核心是计算出一个序列的所有子序列中元素和为最大时的值,不要求输出对应的子序列是什么,而只要求输出和的最大值是多少。 法一: 我们把序列分成两半(左边和右边),...
  • DoWhatIWant_comeon
  • DoWhatIWant_comeon
  • 2017年03月08日 18:22
  • 451

求最大子序列算法

int MaxLeft,MaxRight; int MaxSubseqsum3 (int A[],int N) { int ThisSum=0,MaxSum=0; int SumLeft=0,SumR...
  • qq_29822775
  • qq_29822775
  • 2016年03月13日 22:02
  • 34

求数组的最大子序列和

输入一个整型数组,数组里有正数也有负数。        数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。        求所有子数组的和的最大值。要求时间复杂度为O(n)。 ...
  • liuhuiyi
  • liuhuiyi
  • 2013年03月17日 21:13
  • 1233

求最大子序列的线性算法

L = [-2,11,-4,-13,5,-2] sum = 0 max = 0 for i in range(len(L)): sum = sum + L[i] if sum > ...
  • suyin1993
  • suyin1993
  • 2016年01月31日 16:57
  • 149
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:求最大子序列的算法
举报原因:
原因补充:

(最多只允许输入30个字)