算法第三章上机实践报告

算法第三章上机实践报告
一、题目描述
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。

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

二、算法描述
创建一个新数组b[i],其每一项的值都是以数组a[i]中对应元素结尾的序列的最大字段和。最后返回d[i]中的最大值。

三、问题求解
根据最优子结构性质,列出递归方程式
初始化 b[1]=a[1]
从左到右填表
for(i=0;i<n;i++)
当b[i−1]>0时,b[i]=max(b[i−1]+a[i],a[i])
b[i−1]<=0时,b[i]=a[i]

四、分析该算法的时间和空间复杂度
时间复杂度:O(n)

空间复杂度:O(n)

五、心得体会
解决动态规划问题时要找准递归方程,边界条件,填表顺序,dp数组的范围。要一步一步慢慢分析。

六、对动态规划算法的理解与体会
可以避免大量的重复运算,大大提高了运算效率。要学会如何填表及填表的顺序,一步一步找出条件,逐步求解。

posted @ 2021-10-31 20:05  是小七  阅读(15)  评论(0编辑  收藏  举报