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

2021-08-30 02:48:23 字數 1145 閱讀 7047

•方法一:雙指標

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]);

}

•方法二:分治法,分為左中右三部分,利用歸併的方法求解

o(nlogn

)

int max3( int a, int b, int c )

int divideandconquer( int list, int left, int right )

/* 下面是"分"的過程 */

center = ( left + right ) / 2; /* 找到中分點 */

/* 遞迴求得兩邊子列的最大和 */

maxleftsum = divideandconquer( list, left, center );

maxrightsum = divideandconquer( list, center+1, right );

/* 下面求跨分界線的最大子列和 */

maxleftbordersum = 0; leftbordersum = 0;

for( i=center; i>=left; i-- ) /* 左邊掃瞄結束 */

maxrightbordersum = 0; rightbordersum = 0;

for( i=center+1; i<=right; i++ ) /* 右邊掃瞄結束 */

/* 下面返回"治"的結果 */

return max3( maxleftsum, maxrightsum, maxleftbordersum + maxrightbordersum );}

int maxsubseqsum3( int list, int n )

int maxsubseqsum4( int a, int n )  

return maxsum;

}

最大子列和問題(C語言 分治演算法)

最大子列和問題 maximum subsequence sum 給定k個整數組成的序列,連續子列 被定義為 ni 1 n jn j nj 其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和11。現要求你編寫程式,計算給定整數序列的最大子列和。...

演算法 最大子列和問題

浙江大學 資料結構 思考題 每週練習答案彙總 題目 給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況...

最大子列和問題(C語言實現)

最大子列和問題 pta 程式設計類實驗輔助教學平台 給定k 個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情...