Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,19 @@
|
|||
(defun max-subseq (list)
|
||||
(let ((best-sum 0) (current-sum 0) (end 0))
|
||||
;; determine the best sum, and the end of the max subsequence
|
||||
(do ((list list (rest list))
|
||||
(i 0 (1+ i)))
|
||||
((endp list))
|
||||
(setf current-sum (max 0 (+ current-sum (first list))))
|
||||
(when (> current-sum best-sum)
|
||||
(setf end i
|
||||
best-sum current-sum)))
|
||||
;; take the subsequence of list ending at end, and remove elements
|
||||
;; from the beginning until the subsequence sums to best-sum.
|
||||
(let* ((sublist (subseq list 0 (1+ end)))
|
||||
(sum (reduce #'+ sublist)))
|
||||
(do ((start 0 (1+ start))
|
||||
(sublist sublist (rest sublist))
|
||||
(sum sum (- sum (first sublist))))
|
||||
((or (endp sublist) (eql sum best-sum))
|
||||
(values best-sum sublist start (1+ end)))))))
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
(defun max-subseq (seq)
|
||||
(loop for subsequence in (mapcon (lambda (x) (maplist #'reverse (reverse x))) seq)
|
||||
for sum = (reduce #'+ subsequence :initial-value 0)
|
||||
with max-subsequence
|
||||
maximizing sum into max
|
||||
if (= sum max) do (setf max-subsequence subsequence)
|
||||
finally (return max-subsequence))))
|
||||
Loading…
Add table
Add a link
Reference in a new issue