學習筆記 資料結構 演算法 求最大子列和

2021-08-03 06:15:07 字數 1465 閱讀 6105

學習筆記:資料結構、演算法::求最大子列和

一、一般演算法

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...