最大子陣列問題的三種解法

2021-08-15 15:55:42 字數 925 閱讀 4454

最大子陣列問題:

在乙個數列當中尋找乙個子數列,使得這個子數列的元素之和最大。為了使**簡單化,在這裡我們只求出最大值。

①暴力搜尋,即在c(n,2)種可能的方法中尋找符合題意得一種,顯然時間複雜度為θ(n²);

#include #include using namespace std;

int a[16] = ;

int main() }

cout<②分治法

分:將原數列拆成兩個大小相同的子數列(對半分);

治:對兩個子數列遞迴求解,當子數列只有乙個元素時,返回這個元素的值;

合併:返回左數列,右數列及中間數列(必須貫穿左右數列)的最大值

根據分析,此方法的時間複雜度為θ(n*lgn)

#include #include using namespace std;

int a[16] = ;

int findcrossbigsubarray(int low,int mid,int high) //和一定要包含a[mid]和a[mid+1]

sum = 0;

int right_big = -int_big;

for(int i=mid+1; i<=high; ++i) //mid+1屬於右陣列

return right_big + left_big;

}int findbigsubarray(int low, int high)

int main()

; //sum = ;

int sum[16] = ;

int main()

以上就是最大子陣列問題的三大解法。

演算法導論 最大子陣列問題的三種解法

演算法導論 最大子陣列問題的三種解法 標籤 空格分隔 演算法導論 首先補充兩個數學公式 a lo gbc clog baa c alogb c cl ogb alo g n nlog n log n theta nlogn log n nlog n 什麼是最大子陣列問題?給定一陣列a,尋找a中和最大...

C語言演算法最大子列和問題三種解法

方法一 雙指標 i,j滿足 i每次對 i,j 區間求和找出最大的值,複雜度是 o n 2 include include define n 1000000 int main for i 0 i n i printf d d d n sum,a tempi a tempj 方法二 分治法,分為左中右三...

最大子陣列問題(三種方式,java實現)

1.動態規劃,時間複雜度為n 動態規劃 時間複雜度n param arr return public static integer maxsubarray integer arr sum sum arr i if max sum sum system.out.print min index max ...