Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,4 @@
|
|||
def maxsubseq(seq):
|
||||
return max((seq[begin:end] for begin in xrange(len(seq)+1)
|
||||
for end in xrange(begin, len(seq)+1)),
|
||||
key=sum)
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
def maxsum(sequence):
|
||||
"""Return maximum sum."""
|
||||
maxsofar, maxendinghere = 0, 0
|
||||
for x in sequence:
|
||||
# invariant: ``maxendinghere`` and ``maxsofar`` are accurate for ``x[0..i-1]``
|
||||
maxendinghere = max(maxendinghere + x, 0)
|
||||
maxsofar = max(maxsofar, maxendinghere)
|
||||
return maxsofar
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
def maxsumseq(sequence):
|
||||
start, end, sum_start = -1, -1, -1
|
||||
maxsum_, sum_ = 0, 0
|
||||
for i, x in enumerate(sequence):
|
||||
sum_ += x
|
||||
if maxsum_ < sum_: # found maximal subsequence so far
|
||||
maxsum_ = sum_
|
||||
start, end = sum_start, i
|
||||
elif sum_ < 0: # start new sequence
|
||||
sum_ = 0
|
||||
sum_start = i
|
||||
assert maxsum_ == maxsum(sequence)
|
||||
assert maxsum_ == sum(sequence[start + 1:end + 1])
|
||||
return sequence[start + 1:end + 1]
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
def maxsumit(iterable):
|
||||
maxseq = seq = []
|
||||
start, end, sum_start = -1, -1, -1
|
||||
maxsum_, sum_ = 0, 0
|
||||
for i, x in enumerate(iterable):
|
||||
seq.append(x); sum_ += x
|
||||
if maxsum_ < sum_:
|
||||
maxseq = seq; maxsum_ = sum_
|
||||
start, end = sum_start, i
|
||||
elif sum_ < 0:
|
||||
seq = []; sum_ = 0
|
||||
sum_start = i
|
||||
assert maxsum_ == sum(maxseq[:end - start])
|
||||
return maxseq[:end - start]
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
f = maxsumit
|
||||
assert f([]) == []
|
||||
assert f([-1]) == []
|
||||
assert f([0]) == []
|
||||
assert f([1]) == [1]
|
||||
assert f([1, 0]) == [1]
|
||||
assert f([0, 1]) == [0, 1]
|
||||
assert f([0, 1, 0]) == [0, 1]
|
||||
assert f([2]) == [2]
|
||||
assert f([2, -1]) == [2]
|
||||
assert f([-1, 2]) == [2]
|
||||
assert f([-1, 2, -1]) == [2]
|
||||
assert f([2, -1, 3]) == [2, -1, 3]
|
||||
assert f([2, -1, 3, -1]) == [2, -1, 3]
|
||||
assert f([-1, 2, -1, 3]) == [2, -1, 3]
|
||||
assert f([-1, 2, -1, 3, -1]) == [2, -1, 3]
|
||||
assert f([-1, 1, 2, -5, -6]) == [1,2]
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
'''Greatest subsequential sum'''
|
||||
|
||||
from functools import (reduce)
|
||||
|
||||
|
||||
# maxSubseq :: [Int] -> [Int] -> (Int, [Int])
|
||||
def maxSubseq(xs):
|
||||
'''Subsequence of xs with the maximum sum'''
|
||||
def go(ab, x):
|
||||
(m1, m2) = ab[0]
|
||||
hi = max((0, []), (m1 + x, m2 + [x]))
|
||||
return (hi, max(ab[1], hi))
|
||||
return reduce(go, xs, ((0, []), (0, [])))[1]
|
||||
|
||||
|
||||
# TEST -----------------------------------------------------------
|
||||
print(
|
||||
maxSubseq(
|
||||
[-1, -2, 3, 5, 6, -2, -1, 4, -4, 2, -1]
|
||||
)
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue