我理解Kadane的算法(數組中所有順序子數組的最大總和)是如何工作在「僞代碼」中的,並且我確信我可以將它作爲在C或C++中的函數。不過,我試圖使用Scheme(球拍;文件擴展名爲.rkt)中的列表來實現它,這是我沒有經驗的。Kadane算法在Scheme(球拍)
最終的結果我要找的是...
Input: (maxsum `(1 4 -2 1))
Output: 5
到目前爲止,我已經開發了兩個輔助功能我也許能夠在maxsum函數中使用。
(1)size:返回列表中元素的數量。
(define size
(lambda (list)
(cond
[(not (list? list)) 0]
[(null? list) 0]
[else (+ 1 (size (cdr list)))]
)
)
)
(2)sum:返回列表中所有元素的總和。
(define sum
(lambda (list)
(cond
[(not (list? list)) 0]
[(null? list) 0]
[else (+ (car list) (sum (cdr list)))]
)
)
)
我該如何去定義/設計maxsum函數?
我對「順序子陣列」有些懷疑。 (1,2,3,4)的「連續子陣列」是什麼? – rnso
我的意思是「順序子數組」是從數組中的順序元素組成的數組中提取的子數組。如果你的數組由(1,2,3,4)組成,那麼一個連續的子數組可以是(1,2),或(2,3)或(3,4)或(1,2,3)然而,子陣列(1,3,4)不會是「順序」子陣列,因爲在給定陣列中1和3不相鄰。 基本上,如果你把一對括號的周圍的任何數目的元件的陣列中,這些括號內的元素將是一個「連續的子陣列」給定的陣列構成。 – Anthony
全數組(1 2 3 4)是否也包含在子數組中? – rnso