CSDN博客

img hongweijin

最大子序列和问题的思考

发表于2004/9/28 16:55:00  1147人阅读

/*
 * 问题描述:
 * 最大的子序列和问题:给定整数A1, A2, ....AN (可能有负数),
 *      求Ak到Aj的最大和值k--j是连续的
 *      可以给出线性的算法(看MaxSubsequenceSum2.cpp)
 */
#include <stdio.h>

#define  NUM 8

void main( void )
{
 //
 // set the number
 //
 int source[NUM];

 for (int client = 0; client < NUM; client++)
  scanf("%d", &source[client]);
 //
 // get the maxSubSequenceSum
 //
 int maxSum = 0;
 int clientSum = 0;

 for (client = 0; client < NUM; client++)
 {
  for (int temp = client; temp < NUM; temp++)
  {
   clientSum += source[temp];
   if (clientSum > maxSum)
   {
    maxSum = clientSum;
   }
  }
  clientSum = 0;
 }
 printf("/n%d/n", maxSum);
}
用线性的时间复杂度实现:
/*
 * 问题描述:
 * 最大的子序列和问题:给定整数A1, A2, ....An (可能有负数),
 *      求Ak到Aj的最大和值k--j是连续的
 *      MaxSubsequenceSum2.cpp
 */
#include <stdio.h>

#define  NUM 8

void main( void )
{
 //
 // set the number
 //
 int source[NUM];

 for (int client = 0; client < NUM; client++)
  scanf("%d", &source[client]);
 //
 // get the maxSubSequenceSum
 //
 int maxSum = 0;
 int clientSum = 0;

 for (client = 0; client < NUM; client++)
 {
   clientSum  +=  source[temp];
   if (clientSum > maxSum)
     maxSum = clientSum;
   else if( clientSum < 0)//将丢掉左边的全部
      clientSum = 0;
 printf("/n%d/n", maxSum);
}
从这里可以看到和前面的一个时间复杂度要好的多,但是代码修改的只是几处而已!


以上代码从<数据结构与算法分析--C语言描述>引出

阅读全文
0 0

相关文章推荐

img
取 消
img