最大子串行和演算法

2021-07-05 06:55:05 字數 524 閱讀 1053

題目:求a[i]中和最大的子串行。

時間複雜度o(nlogn):

使用分治+遞迴的方法。分別求出左邊n/2長度的最大子串行和、右邊n/2長度的最打字序列和、以及橫跨這兩部分且通過中間的最大和(要分別求出兩邊帶有最中間邊界的最子大序列和,將其相加),由於不是最簡單的方法,這裡不再贅述。

時間複雜度o(n):

遍歷一遍a即可得到結果:

int maxsubsequencesum (const int a, int n)

return maxsum;

}

個人分析:

演算法中,thissum每次重置,都代表前面的和為負,可不必考慮加在後面要計算的最大子串行中,即可重置thissum,拋棄已計算過的值;重置後,只要thissum不小於0,都可以考慮加在大子串行中,因此thissum(s,...,e)範圍包含的更小範圍的子串行(s+i,...,e-j)中不會有超過已經計算過的最大值的子串行和。

最大子串行和演算法

include stdio.h 演算法1 int maxsubsequencesum1 const int a,int n int thissum,maxsum,i,j,k maxsum 0 for i 0 i n i for j i j n j thissum 0 for k i k j k th...

演算法 最大子串行和

最大子串行和的問題,資料結構與演算法一書分析中給出了四種演算法,最優的演算法的時間複雜度為o n 1 定義控制台應用程式的入口點。2 34 include stdafx.h 5 include 6 using namespace std 7int maxsubsequesum const int a...

演算法 最大子串行和

最大子串行和的問題,資料結構與演算法一書分析中給出了四種演算法,最優的演算法的時間複雜度為o n 1 maxsubsequencesum.cpp 定義控制台應用程式的入口點。2 3 4 include stdafx.h 5 include 6 using namespace std 7 int ma...