2022-01-09|閱讀時間 ‧ 約 3 分鐘

求解最大子序列和

問題如下,在這串連續數列中 : -7、8、2、9、3、-4、-8、7、9、-5,請找出最大的子序列之和、以及最小的子序列之和,求最大子序列和 ~ MaxSubSum,是用途很廣的敘述統計工具,例如應用於求解 MDD、描述價格資料期間內最大的累積上漲點數...等
Kadane's 提供的算法邏輯如下 : 1. 該元素如果是負值,就不是子序列起點; 2. 同理,子序和為負值亦不列入集合內 僅需兩個判斷條件,即可建構程式碼求解
Excel VBA程式碼提供如下
Public Function MaxSubArraySum(ByVal InputData As Range, ByVal Output As Variant) As Variant 'Output=1 求解最大子序列和 'Output=-1 求解最小子序列和 Dim ArrDataX() As Variant Dim DataCount As Variant Dim ii As Variant Dim thisSum As Variant Dim MaxSum As Variant
ArrDataX = InputData '抓取Excel 欄位的數據,存入VBA控制的陣列 DataCount = InputData.Count '記錄抓取的資料筆數
thisSum = 0 MaxSum = 0
For ii = 1 To DataCount thisSum = thisSum + (Output) * ArrDataX(ii, 1) If thisSum MaxSum Then MaxSum = thisSum If thisSum 0 Then thisSum = 0 Next 'For ii = 1 To DataCount MaxSubArraySum = (Output) * MaxSum '求解最大子序列和 End Function
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.