演算法第三章實驗報告
阿新 • • 發佈:2021-10-24
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)
心得體會:
解決動態規劃問題首先先找到要求解的問題和子問題,再找出其遞迴方程,不要想太複雜,要保持頭腦清醒,邏輯清晰
動態規劃個人體會及思考:
動態規劃演算法基本思想與分治法類似,都是講待求解問題分解為若干個子問題,不同是動態規劃分解得到的子問題往往不是相互獨立的。
動態規劃問題特徵:最優子結構性質;重疊子問題性質。
需要重點掌握:矩陣連乘問題,揹包問題等