1. 程式人生 > 其它 >演算法第三章實驗報告

演算法第三章實驗報告

7-1 最大子段和 (25 分)

給定n個整數(可能為負數)組成的序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。當所給的整數均為負數時,定義子段和為0。

要求演算法的時間複雜度為O(n)。

輸入格式:

輸入有兩行:

第一行是n值(1<=n<=10000);

第二行是n個整數。

輸出格式:

輸出最大子段和。

輸入樣例:

在這裡給出一組輸入。例如:

6
-2 11 -4 13 -5 -2
結尾無空行

輸出樣例:

在這裡給出相應的輸出。例如:

20
結尾無空行

問題描述:

1、所加全為負數,輸出0;如何判斷全為負數?--用一個迴圈遍歷陣列a[n],定義一個變數記錄負數個數,如果該變數的值等於n則說明該陣列全為負數

2.陣列不全為0,求出最大子段和並輸出

遞迴方程:f(i)=max{f(i-1)+a[i],a[i]}

f(i)表示第i個數結尾連續子陣列最大和,f(0)=-2

f(1)=11

f(2)=max{f(1)+a[2],a[2]}, a[2]=-4, f(1)+a[2]=7 --> f(2)=7

f(3)=max{f(2)+a[3],a[3]}, a[3]=13, f(2)+a[3]=20 --> f(3)=20 為最大值

最大子段和為20

演算法描述:

演算法時間及空間複雜度分析:

沒有迴圈的巢狀,時間複雜度為O(n)

心得體會:

解決動態規劃問題首先先找到要求解的問題和子問題,再找出其遞迴方程,不要想太複雜,要保持頭腦清醒,邏輯清晰

動態規劃個人體會及思考:

動態規劃演算法基本思想與分治法類似,都是講待求解問題分解為若干個子問題,不同是動態規劃分解得到的子問題往往不是相互獨立的。

動態規劃問題特徵:最優子結構性質;重疊子問題性質。

需要重點掌握:矩陣連乘問題,揹包問題等