求最大子列和:降低时间复杂度,本文内容来自 MOOC 浙江大学 数据结构 陈越等
题目:给定N个整数的序列{A1,A2,A3,…,AN},求函数f(i,j)=max{0,∑AK}的最大值,其中求和的范围是从K=i到K=j
下面是4种算法:
T(N)=O(N3)
int MaxSubseqSuml( int A[], int N)
{
int ThisSum, MaxSum = 0;
int i,j,k;
for(=0;i<N;i++){
/* i是子列左端位置 */
for(j=i;j<N;j++){
/* j是子列右端位置 */
ThisSum=0; /* ThisSum是从A[i]到A[j]的子列和 */
for(k=i;k<=j;k++)
ThisSum += A[k];
if(ThisSum > MaxSum) /*如果刚得到的这个子列和更大*/
MaxSum = ThisSum; /*则更新结果*/
} /*j循环结束*/
} /*i循环结束*/
return maxSum;
}
T(N)=O(N2)
int MaxSubseqSum2(int A