最大子陣列問題:
在乙個數列當中尋找乙個子數列,使得這個子數列的元素之和最大。為了使**簡單化,在這裡我們只求出最大值。
①暴力搜尋,即在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 ...