1.1 问题的描述
最大子段和问题的求解:
1.2 算法的描述
定义一个MaxSum函数,定义并初始化一个sum变量和一个b变量,用一个for循环来寻找a[n]中的最大字段和,判断条件如果b+a[i]大于a[i]本身,那么b就等于b+a[i]之后的值,如果不大于那么就将a[i]直接赋值于b。最后对所得sum跟所得b值作比较选出一个最大值,return sum;在main函数中定义并输入一个n值,再定义一个一维数组a[n];用for循环属于数组,最后输出sum值得到最大字段和的结果。
1.3 问题求解
1.3.1 递归方程式
1.3.2 填表
1.3.3 算法的时间复杂度和空间复杂度
从a[1]到a[j]进行的比较很显然算法的时间复杂度为O(n),而空间也是填表的一维表所占用,所以空间复杂度应为O(n);
1.4 心得体会
这次在实验室跟同伴结对这道题的编码的时候,在最大字段和的理解上和对b[j]含义的理解上出了问题,导致递归方程式列不出来也不理解,看同学代码的时候也有点云里雾里,但是后来想明白之后,才发现原来是挺简单的一道题,所以之后做题还是要从最基本的入手,尤其是动态规划最基本的递归方式真的特别重要。
1.5 动态规划算法的心得和体会
其实动态规划和分治法非常的类似,基本思想都是把大问题划分成一个个的小问题,找出这些小问题的解,最终合成大问题的解决方案,但不同于分治法的就是动态规划会在这过程中记录一些小问题的解,这样以后遇到这些小问题就不用在重新进行计算而是找到解直接使用,降低了时间的复杂度;在系统分析问题时,动态规划常常被使用,这种动态规划的算法感觉能较好解决一些复杂的大问题