算法第三章实验报告

实践报告任选一题进行分析。内容包括:

  1. 实践题目

最大子段和

  1. 问题描述

给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。

要求算法的时间复杂度为O(n)。

  1. 算法描述

for(i=1;i<=n;i++)
  cin>>a[i]; 
 ma=b[1]=a[1];
 for(i=2;i<=n;i++){   
  if(b[i-1]<=0)
  ma=b[i-1]=0;
  b[i]=b[i-1]+a[i];
  if(b[i]<0){
   i++;
   b[i]=a[i];
  }
  ma=max(ma,b[i]);
 }
 

  1. 算法时间及空间复杂度分析(要有分析过程)

时间复杂度:算法中只用到一维数组的遍历,因此时间复杂度为O(n);

空间复杂度:使用一维数组b[]存放字段和,空间复杂度为O(n)。

  1. 心得体会(对本次实践收获及疑惑进行总结)

小组讨论收获匪浅。

猜你喜欢

转载自www.cnblogs.com/sufeifan1020/p/9938684.html