算法第三章上机实践报告
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)根据计算优值时得到的信息,构造问题的最优解。
- 疑惑
方法掌握不牢固,有思路就是写不出...