算法第三章上机实验报告

7-1 最大子段和

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

 

1.2 算法描述:先记录一个起始状态的值D[0]=a[0],再分别写出D[i-1]>0与D[i-1]<=0的递归方程式,两种情况分别对应 D[i]=a[i]+D[i-1]与 D[i]=a[i],D[i]为子序列最后一个数字为a[i]时的最大子序列和,最后用max 记录最大段子和。

 

1.3 问题求解:

1.3.1 根据最优子结构性质,列出递归方程式:

D[i]=a[i]+D[i-1], D[i-1]>0;

D[i]=a[i], D[i-1]<=0;

1.3.2 表的维度:一维表;填表范围:从0至n;填表顺序:至左向右;

1.3.3 时间复杂度:O(n),因为0<i<=n,算法根据递归关系则将D[i-1]与0进行对比n次的循环;

 

1.4 心得体会:

动态规划的上机实验,在解题中问题大多出现在递归的范围,其中的数组变量,有的题计算最优值小组两人会讨论尝试不同的顺序进行计算,然后课上有一题卡了挺久,也是一些两人都没注意的递归条件的漏洞,所以学习过后要多巩固,熟悉掌握动态规划这一章的知识。

 

2.对动态规划算法的理解和体会:

动态规划设计步骤通常为:1.分析最优解结构2.建立递归关系3.计算最优值,该算法的有效性依赖于问题的最优子结构性质和子问题重叠性质,动态规划法与分治法相比,相同之处是也将原问题分解为若干子问题,再递归求解,不同之处是所分解的子问题彼此并不独立,而是互有重叠;体会到了解决问题的方法多样性,可以有更优化的算法,在问题趋近复杂时,要学会寻求更优的算法对其求解。

posted @ 2021-10-25 20:06  aoapppggg  阅读(26)  评论(0编辑  收藏  举报