學習筆記:資料結構、演算法::求最大子列和
一、一般演算法
int maxsum(int a,int n)
if(thissum>maxsum)}}
}
時間複雜度為o(n^3);
二、簡單優化演算法
int maxsum(int a,int n)
} }
在取子列右端時便計算子列和,少了一層計算子列和的迴圈;
時間複雜度為o(n^2);
三、分治演算法
#include
#include
using
namespace
std;
int tmax(int,int,int);
int maxsum(int,int,int);
int leftmaxsum(int,int,int);
int rightmaxsum(int,int,int);
int main()
//int a[8]=;
cout
<0,n);
delete a;
return0;}
int tmax(int a,int b,int c)
else;
if(m>c)
else
}int maxsum(int a,int left,int right)
mid=(right+left)/2;
leftmax=maxsum(a,left,mid);
rightmax=maxsum(a,mid+1,right);
smax=max(leftmax,rightmax);
midmaxsum=leftmaxsum(a,left,mid)+rightmaxsum(a,mid+1,right);
//return tmax(leftmax,rightmax,midmaxsum);
return max(smax,midmaxsum);
}int leftmaxsum(int a,int left,int mid)
}return maxsum;
}int rightmaxsum(int a,int mid,int right)
}return maxsum;
}
時間複雜度:
t(n)=2t(n/2)+c*n,t(1)=o(1);
遞推得到 t(n)=2^k*o(1)+c*k*n,k=log2(n);
時間複雜為o(n*logn);
int maxsum(int a,int n)
if(thissum<0)
}return maxsum;
}
時間複雜度:o(n); 資料結構 求最大子列和
陳越姥姥已經講得很好了 傳送門,我只做記錄方便回顧。四種演算法 1.暴力,演算法複雜度 o n 3 2.暴力,演算法複雜度 o n 2 3.分治法 遞迴 演算法複雜度 o nlogn 4.及時處理,演算法複雜度 o n includeint a 100000 int whoismax int i,i...
資料結構學習 最大子列和
k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資料特點如下 輸入第1行給出正整數k ...
資料結構學習筆記 求最大子列和(C語言實現)
給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。根據浙大資料結構課程中的 編寫,細節有修改,四種演算法。時間複雜度 t n o n3 incl...