此篇講的是截止時間至 3 月 26 日 18:00 的最大子串行之和 1 之小結。相應的題目,可以見王建民老師的部落格中第一題:
這是乙個最優化問題,並且要求時間複雜度為 \(o(n)\)。這樣一來,首先想到的應該是動態規劃思想。
動態規劃是求解最優化問題的一種思想。
動態規劃的核心,是要尋找一種看待問題的方式:這種角度以某種方式將原問題劃分為有限的若干階段;每個階段可以有若干狀態,但只有乙個最優狀態;當前階段的最優狀態,可以用某種確定的方式,從過去某些階段的某些狀態直接得到;這種方式,只與這些階段的狀態有關,而與這些狀態是如何得到的無關。這樣一來,如果我們能夠在某個階段找到確定的最優狀態,就能夠逐層遞推,找到原問題的最優解。
在這裡:
也就是說,動態規劃的核心,是要尋找一種具有最優子結構的無後效的問題拆解方式。
以下是用 python 簡寫的本題參考:
def maxsubarraysum (nums):
if not nums:
return none
elif 1 == len (nums):
return nums[0]
local_max, global_max = nums[0], nums[0]
for i in xrange (1, len (nums)):
local_max = max (local_max + nums[i], nums[i])
global_max = max (local_max, global_max)
return global_max
if __name__ == '__main__':
test_cases = [, [0], [1], [1, 2, 3], [-3, -1, -2],
[9, 8, 5, 2, -5, 6, 2, -2]]
for nums in test_cases:
print "the maxsubarraysum of", nums, "is", maxsubarraysum (nums)
這次作業滿分 10 分,採取扣分制與體驗分相結合的方式。具體來說:
學號截至上次作業得分小計
160326 18:00
小計20122951237
3020132897249
3320132900
116.5
17.5
20132902
266.5
32.5
20132907308
3820132917
327.5
39.5
20132922
287.5
35.5
20132927
20.5
626.5
20132935
24.5
933.5
20132967208
2820132970
22.5
022.5
20132984297
3620132985
27.5
5.533
20133005
24.5
529.5
20133009
255.5
30.5
20133012
27.5
532.5
20133014145
1920133018193
2220133039
29.5
2.532
20133040
26.5
1.528
20133045218
2920133048
281.5
29.5
20133051
24.5
832.5
20133054
312.5
33.5
20133057
17.5
623.5
20133059
19.5
7.527
20133062
124.5
16.5
20133064
24.5
630.5
20133070256
3120133075266
3220133078297
3620133081
24.5
6.531
20133087
24.5
5.530
20133100288
3620132899
6.53.5
1020132901
95.5
14.5
20132903
22.5
931.5
20132910
28.5
937.5
20132912
327.5
39.5
20132919319
4020132924329
4120132958308
3820132959
307.5
37.5
20132965
286.5
34.5
20132971
266.5
32.5
20132980287
3520133004
28.5
5.534
20133008
22.5
527.5
20133010
8.52.5
1120133013198
2720133017
216.5
27.5
20133019296
3520133024
249.5
33.5
20133027
249.5
33.5
20133031
185.5
23.5
20133042
17.5
522.5
2013304350
520133044
4.50
4.520133047151
1620133056
243.5
27.5
20133058
25.5
833.5
20133063
215.5
26.5
20133066
21.5
021.5
20133073
14.5
8.523
20133077
245.5
29.5
20133079
245.5
29.5
20133088
10.5
010.5
20133093
21.5
425.5
20133099174
2120133101258
33歡迎參看下面的文章:
最大子串行
模板 int maxsubsequence const int a,int n return maxsum 複雜度on 給定k個整數的序列,其任意連續子串行可表示為,其中 1 i j k。最大連續子串行是所有連續子串行中元素和最大的乙個,例如給定序列,其最大連續子串行為,最大和 為20。在今年的資料...
最大子串行
最大子串行是要找出由數組成的一維陣列中和最大的連續子串行。比如的最大子串行就是 它的和是8,達到最大 而 的最大子串行是,它的和是6。你已經看出來了,找最大子串行的方法很簡單,只要前i項的和還沒有小於0那麼子串行就一直向後擴充套件,否則丟棄之前的子串行開始新的子串行,同時我們要記下各個子串行的和,最...
最大子串行
maxsum最大子串行問題。其實是動態規劃問題,遞推式如下 s 1 a 1 s n s n 1 0?s n 1 a n a n 注意點 暴力是可以解決問題,但是時間肯定會超時。暴力就是把所有子串行都查一遍然後找乙個最大的。如序列為123456,它的所有子串行為 1 2 3 4 5 6 12 123 ...