算法第三章上机实践报告

1.实践题目

给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。

2.问题描述

在一段序列中,求出连续的一段序列,使其和最大。

3.算法描述

int Maxsum(int n,int *a){
    int sum=0,t=0;
    for(int i=1;i<=n;i++){
        if(t>0)
            t+=a[i];
        else
            t=a[i];
        if(t>sum)
            sum=t;
    }
    return sum;
}

4.算法时间及空间复杂度分析(要有分析过程)

时间复杂度:算法中,从序列头到尾,进行条件判断,因此时间复杂度为O(n);

空间复杂度:n,sum,*a,t所分配的空间都不随着处理数据量变化,因此它的空间复杂度 S(n) = O(1)

5.心得体会(对本次实践收获及疑惑进行总结)

  • 解题方法

(1)分析最优解的性质,并刻画其结构特征。

(2)递归的定义最优解。

(3)以自底向上或自顶向下的记忆化方式(备忘录法)计算出最优值。

(4)根据计算优值时得到的信息,构造问题的最优解。

  • 疑惑

方法掌握不牢固,有思路就是写不出...

posted @ 2019-10-21 17:04  纸片人offerman  阅读(122)  评论(0编辑  收藏  举报