分治法寫最大子列和問題

2021-07-23 22:42:44 字數 806 閱讀 3993

int

max3( 

inta, 

intb, 

intc )

intdivideandconquer( 

intlist, 

intleft, 

intright )

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

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( 

intlist, 

intn )

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

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

分治法解決最大子陣列問題

利用分治法解決最大子陣列問題 對給定的陣列得到該陣列中具有最大和的子陣列 對於給定的整數陣列a,求出陣列中具有最大和的子陣列,最大和以及左右下標 思路 採用分治的方法,將陣列分為兩部分,則有最大和的子陣列共有三種情況 在陣列左邊,在陣列右邊,跨越陣列中點 include using namespac...

分治法解決最大子陣列問題

演算法導論中一道很有趣的演算法入門題目,問題是解決最大子陣列的問題,給你乙個陣列,要求你求出其中和最大的連續子陣列,最簡單的思考方式就是暴力求解,對所有的情況都進行組合然後得出最大值,但是這個複雜度是n 為了減少複雜度,演算法導論提供了一種思路,就是用分治法解決最大子陣列的問題 我們首先將要求的陣列...