最大子段和(三)

2021-08-31 02:17:09 字數 719 閱讀 9314

最大子段和問題

解法三:

演算法分析:

對於序列a,設j代表當前序列的終點,i代表當前序列的起點

分析:如果a[i]是負的,那麼它不可能是最大子段的起點,因為任何包含a[i]為起點的子段都可以通過

用a[i+1]為起點而得到改進。類似的,任何負的子段都不可能是最優子段的字首(原理相同).

如果在迴圈中檢測到a[i]到a[j]的子段是負的,那麼可以推進i.

結論:不僅能把i推進到i+1,而且可以一直推進到j+1.

原因:令p為i+1和j之間的任一下標。開始於下標p的任意子段都不大於從下標i開始幷包含從a[i]到a[p-1]的子段,

因為a[i]到a[p-1]這個子段不是負的(j是使得從下標i開始,其值成為負值序列的第乙個下標)

演算法實現:

public class maxsum 

else if (thissum < 0)

}return maxsum;

} public static void main(string args)

; system.out.println(maxsum.maxsubsum(ar));

}}

演算法的優點:

1)執行時間最短;

2)而且只對資料進行一次掃瞄,一旦a[i]被讀入並被處理,它就不在需要被記憶;

3)在任何時刻,演算法都能對已讀入的資料給出該問題的正確答案;

(三)最大子段和問題

1.概念 求陣列的和最大的非空連續子陣列,這樣的連續的子陣列稱為最大子陣列 maximum subarray 2.常規方法 o 3 最大子段和問題 o 3 include using namespace std 列印陣列 void printarray int arr,int strat,int l...

最大子段和

設a 是n個整數的序列,稱為該序列的子串行,其中1 i j n.子串行的元素之和稱為a的子段和.例如,a 2,11,4,13,5,2 那麼它的子段和是 長度為1的子段和 2,11,4,13,5,2 長度為2的子段和 9,7,9,8,7 長度為3的子段和 5,20,4,6 長度為4的子段和 18,15...

最大子段和

問題表述 n個數 可能是負數 組成的序列a1,a2,an.求該序列 例如 序列 2,11,4,13,5,2 最大子段和 11 4 13 20。1 窮舉演算法 o n3 o n2 2 分治法 將序列a 1 n 從n 2處截成兩段 a 1 n 2 a n 2 1 n 例項 三 最大子段和 問題表述 n個...