A-M baby
This commit is contained in:
parent
764da6cbbb
commit
db842d013d
19005 changed files with 197040 additions and 7 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]
|
||||
Loading…
Add table
Add a link
Reference in a new issue