分治算法 ------最大子段和


 

1.最大子段和問題的描述

 

 

2.分治策略的求解思路

 

 

 

用分治法求解這個問題 。

在數組的 center = (right-left)/2+left 位置處分開。形成兩個子數組。

那么,最大子段和 可能出現在三個位置:

          a.可能出現在 左 子數組 

          b. 可能出現在 右子數組 

          c.可能出現在 過center的 中間某部分 元素 組成的子數組。

 

(一定會過center 嗎? 為什么一定會過center?因為這是分治過程,center的值會發生改變,當然,計算中所包含的數也會發生改變,所以,不要死盯着 (0+array.length)/2 的center,center 是 (left+right)/2 ,而不是 (0+array.length)/2

 

下面考慮 三種情況的計算方法:

第一種情況: 計算 left 到 center 的最大和,記作 leftSum

第二種情況: 計算從 center+1 到 right的最大和,記作 rightSum

第三種情況: 跨邊界的和。 ;以center為中心分別向兩邊計算和。

       a.從 center出發,每次向左邊擴張一步,並且記錄當前的值S1,如果當前的和比上次的和大,就更新S1,一      直向左擴張到 位置  Left。 

      b.從 center+1出發,每次擴張一步,計算當前的和 為S2,如果當前的值比上次的和 大,那么,就更新S2的      值,一直向右擴張到位置Right。

      c.計算過center的連續值的和,S1+S2的值 Sum。 這個就是跨邊界的和。

 上面三種情況考慮計算完成后,最后一步就是,比較三個值中的最大值,取最大值就可以了。

 

 

 3.分治方法求解的偽碼

 

 

 

4.最后考慮用分治方法求解的時間復雜度。

我們在(left+right)/2處,把大問題分成了兩個部分的小問題

T(N)1=2T(N) , T(N)2=N

在跨邊界求和的時候,我們需要計算 從center出發的到 left方向的最大和,每次增加一個元素,通過比較,得到最大的和,

時間復雜度為O(N),同樣, 從center+1 出發的到  right 方向的最大和,每次增加一個元素,通過比較,得到最大的和,時間復雜度 為 O(N) ,所以,時間復雜度為  O(N)

 

 

5. 代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM