1. 程式人生 > >演算法第三章實驗報告

演算法第三章實驗報告

實踐報告任選一題進行分析。內容包括:

  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. 心得體會(對本次實踐收穫及疑惑進行總結)

小組討論收穫匪淺。