演算法設計 最大子段和問題 分治法

2021-10-23 04:22:42 字數 749 閱讀 7249

演算法設計--最大子段和問題--分治法

給定由n個整數組成的序列(a1, a2, …, an),最大子段和問題要求該序列形如

最大子段和問題的分治策略是:

(1)劃分:按照平衡子問題的原則,將序列(a1, a2, …, an)劃分成長度相同的兩個子串行(a1, …, a[n/2]      )和(a[n/2], …, an),則會出現以下三種情況:

① a1, …, an的最大子段和=a1, …,a[n/2] 的最大子段和;

② a1, …, an的最大子段和=a[n/2]+1, …, an的最大子段和;

③ a1, …, an的最大子段和=

(2)求解子問題:對於劃分階段的情況①和②可遞迴求解,情況③需要分別計算

(3)合併:比較在劃分階段的三種情況下的最大子段和,取三者之中的較大者為原問題的解。

#includeusing namespace std;

int maxsum(int a,int left,int right)

else

int s2=0;int rights=0;

for(int j=center+1;j<=right;j++)

sum=s1+s2;

if(sum

if(sum

}return sum;

}int main()

; int b=maxsum(a,0,5);

cout<

}

最大子段和之分治法

問題描述 給定乙個陣列,找出其中可以構成最大數的子段,需要注意的是,這個不同於最大子串行求和 最大字段求和 字段必須是連續的 最大子串行求和 子串行只要是包含在原來的序列中即可 舉個例子 1 4 3 1 5 1 4 5 2 求上述的陣列中的最大欄位和,不難得知,最大子段和就是 10 也就是子段4 3...

分治法(2) 最大子段和

題目 給定n個元素的整數列 可能為負整數 a1,a2,an.求形如 ai,ai 1,aj i j 1 n,i j 的子段使其和為最大。當所有整數為負整數時定義其最大欄位和為0。例如當 a1,a2,a3,a4,a5,a6 2,11,1,13,5,2 最大欄位和為i 2,j 4 下標從1開始 如果直接用...

最大子段和問題(分治法和動態規劃)

什麼是最大子段和,通俗點講 最大子段和就是給了一些數,然後你從中找了幾個連續的數,這組連續的數的和比任意一組連續的數的和都大,那麼你找的這幾個連續的數的和就是這些數的最大子段和。通俗的聽不懂你就看這裡 給定由n個整數 可能為負整數 組成的序列 分治法思想 如果將所給的序列a 1 n 分為長度相等的兩...