时间复杂度分析:
分治法:
情况1和情况2需要递归求解,对应情况3,两个并列的for循环的时间复杂度是O(n),所以,存在以下递推式:
T(n)=1 当n=1时
T(n)=2T(n/2)+n 当n>1时
故分治法时间复杂度为O(nlog2n)。
动态规划法:
算法中只存在一个for循环,从0到n,执行次数为n+1,算法复杂度为O(n)。
一、分治法
输入:字段数组
输出:最大字段和
1、将数组划分为两组
1.1递归求解右侧最大字段和leftsum;
1.2递归求解右边最大字段和rightsum;
1.3分别求S1和S2,S1+S2为midsum;
2、比较三个最大字段和求出,字段数组的最大字段和Maxsum;
二、动态规划法
输入;字段数组
输出:最大字段和
1、定义tempsum和maxsum,tempsum暂存遍历过程中的字段和
2、从下标0开始遍历
2.1 比较tempsum+A[j]和A[j]的大小,将大者赋给tempsum
2.2 比较tempsum和maxsum的大小,大者赋给maxsum
3、输出最大字段和maxsum