算法第3章上机实践报告
Posted fine-five
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法第3章上机实践报告相关的知识,希望对你有一定的参考价值。
一、实践题目:求最大子段和
二、问题描述
-
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。
要求算法的时间复杂度为O(n)。
三、算法描述
- 本题利用动态规划算法求出最大子段和
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; }
四、算法时间及空间复杂度分析(要有分析过程)
- 算法时间复杂度为:O(n),因为有一个for循环,循环次数为n.
- 算法空间复杂度为:O(n),数组s的大小为n.
五、心得体会(对本次实践收获及疑惑进行总结)
- 一开始对于i位置所计算的子段和不是很清楚,搞错为前i个数的最大和。
- 这道题相对比较简单,所以觉得动态规划没有自己想象中那么难,关键是理解思想,学会应用。
以上是关于算法第3章上机实践报告的主要内容,如果未能解决你的问题,请参考以下文章