最大子串行和問題

2021-07-03 02:12:31 字數 1131 閱讀 7847

求最大自序列和的問題 

演算法一

//窮舉法,複雜度

o(n^3) 

int maxsubsum1(const int a , int n ) 

long maxsum = 0; 

for (int i = 0; i < n; i++) 

for (int j = i; j long thissum = 0; 

for (int k = i; k <= j; k++) 

thissum += a[k]; 

if (thissum > maxsum) 

maxsum = thissum; 

return maxsum; }

例如 i= 0  ; j =2 :   第三個迴圈執行的是: a[0],a[1].a[2],   當j=3 , 第三個迴圈執行的是:a[0],a[1].a[2],  a[3],  j =n , a[0 ] , a[ 1] ,a[2], ..... a[n] 

所有有好多的重複計算。所以最後乙個for語句可以省略掉 ,從頭加到尾,中間保留最大值,得出演算法二。

演算法二:

int maxsubsequencesum(const int a, int n)

}return maxsum;

} 演算法三:

採用分治法,分治法就是分而治之, 如果子問題是最優解就是全域性最優解。

所以最大自序列只可能出現在三處,整個佇列的左半部的最優解為a ,整個佇列的又半部最優解b,以及,包含坐比

static int maxsubsum(const int a, int left, int right)

maxrightbordersum = 0;rightbordersum = 0;

for(i = center + 1; i <= right; i ++)

//處理完畢,找出和最大的乙個子串行

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

}//呼叫函式

int maxsubsequencesum(const int a, int n)

//比較函式

int max3(int x, int y, int z)

最大子串行和問題

問題 給定一整數序列a1,a2,an 可能有負數 求a1 an的乙個子串行ai aj,使得ai到aj的和最大 例如 整數序列 2,11,4,13,5,2,5,3,12,9的最大子串行的和為21。對於這個問題,最簡單也是最容易想到的那就是窮舉所有子串行的方法。利用三重迴圈,依次求出所有子串行的和然後取...

最大子串行和問題

問題描述 給定乙個整數序列 可能有負數 求一子串行 記為l 使得該子串行所有元素之和最大。例 給定序列 2,11,4,13,5,2,則最大子串行和為20 11,4,13 方法一 遍歷窮舉 o n 2 略方法二 分治遞迴 o n logn 思路 將輸入序列l分為左右兩個子串行l1和l2,則l 只可能以...

最大子串行和問題

問題描述 求 2,11,4,13,5,2 的最大子串行和。方法一 使用3層for迴圈巢狀,窮舉式的嘗試所有的可能,如下 public class demo1 return maxsum public static void main string args system.out.println 最大...