算法第三章作业
1.1 问题描述
7-1 最大子段和 (25 分)
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。
要求算法的时间复杂度为O(n)。
1.2 算法描述
令tempSum初始化0,当C[i]>0时,tempsum = tempsum+c[i],否则tempsum=c[i], //b[j-1]>0时,b[j] = b[j-1]+a[j],否则b[j] = a[j];
tempSum = (tempSum +C[i]) > C[i] ? (tempSum + C[i]) : C[i]; //b[j] = max{b[j-1]+a[j],a[j]}
令sum初始化为0,若最终结果tempsum>sum,即最大字段和一定大于0,则输出tempsum的值,否则说明输入值加起来均小于0,由题意知此时定义最大字段和为0.
1.3 问题求解:
1.1.1 根据最优子结构性质,列出递归方程式,
sum = max{tempsum+c[i],c[i]};
令tempSum初始化0,当C[i]>0时,tempsum = tempsum+c[i],否则tempsum=c[i].
1.1.2 给出填表法中表的维度、填表范围和填表顺
c[i]
tempsum
1.1.3 分析该算法的时间和空间复杂度
时间复杂度 O(n) 因为是一重循环
空间复杂度 O(n)
1.3 心得体会(对本次实践收获及疑惑进行总结)
一开始使用蛮力求解,双重循环会造成时间复杂度为o(n^2),没有动态规划省时间,以后在做题时要多考虑动态规划。
2. 你对动态规划算法的理解和体会
学习了使用动态规划解决问题时,要列出优化函数的递推方程及初值,
以及一个最优决策序列的任何子序列本身一定是相对于子序列的初始和结束状态的最优决策序列。