原题是一个一维模式识别的题:求n个浮点数向量中连续若干个子向量中的最大和。在书中共讨论了四种算法:
第一种算法是最笨的办法,利用三重循环求出每一个子向量的和,然后求出其中的最大值,其时间复杂度为O(n3)
int maxvect(int *x,int n)
{
int maxsofar=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
sum=0;
for(int k=i;k<=j;k++)
{
sum+=x[k];
}
maxsofar=max(maxsofar,sum);
}
}
return maxsofar;
}
第二种算法分了两种,其一是在求x[1...i]时利用x[1...i-1]的值,则减少了一层内循环,第二种是将计算的和的子向量存储在一个数组中,又可称为累积表,这样每个子向量的和都可由累计表中两项相减得到。这两种算法的时间复杂度都是O(n2)
第一种:
int maxvect(int *x,int n)
{
int maxsofar=0;
for(int i=0;i<n;i++)
{
sum=0;
for