算法第3章上机实践报告

Posted fine-five

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法第3章上机实践报告相关的知识,希望对你有一定的参考价值。

一、实践题目:求最大子段和 

二、问题描述

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

    要求算法的时间复杂度为O(n)。

三、算法描述

  1. 本题利用动态规划算法求出最大子段和
    int max(int s[],int n){
    int
    mac=0,c=0; for(int i=0;i<n;i++){
    if(c>0){ c=c+s[i]; } else{ c=s[i];
    //若i位置之前的子段和为负,则舍弃之前的子段和。
    }
    //c的每一次结果均为当前i位置的最大子段和,不是前i的最大子段和,因为i位置可能为负数,前子段和加上i可能会变小。
    if(mac<c){ mac=c; } } return mac; }

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

  1. 算法时间复杂度为:O(n),因为有一个for循环,循环次数为n.
  2. 算法空间复杂度为:O(n),数组s的大小为n.

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

  1. 一开始对于i位置所计算的子段和不是很清楚,搞错为前i个数的最大和。
  2. 这道题相对比较简单,所以觉得动态规划没有自己想象中那么难,关键是理解思想,学会应用。




以上是关于算法第3章上机实践报告的主要内容,如果未能解决你的问题,请参考以下文章

算法第3章上机实践报告

算法第3章上机实践报告

算法第5章上机实践报告

算法第3章上机实践报告

算法第3章上机实践报告

算法第3章上机实践报告