Я пытаюсь понять решение этой проблемы: «Учитывая последовательность чисел, найдите максимальную сумму смежной подпоследовательности этих чисел». Я привел решение и объяснение ниже.Максимальная непрерывная непрерывная подпоследовательность равна нулю?
То, что я не понимаю, в строке «maxendinghere = max (maxendinghere + s, 0)», почему maxendinghere когда-либо будет равна нулю?
def max_sum_subsequence(seq):
maxsofar = 0
maxendinghere = 0
for s in seq:
# invariant: maxendinghere and maxsofar are accurate
# are accurate up to s
maxendinghere = max(maxendinghere + s, 0)
maxsofar = max(maxsofar, maxendinghere)
return maxsofar
Объяснение с веб-сайта «Ну, по сути maxendinghere является то, что накопление подпоследовательности -. Он катиться следующий элемент в себя Если эта накопленная сумма никогда не станет отрицательным, мы знаем, что подпоследовательности-который-ends- здесь мы в настоящее время отслеживаем хуже, чем пустая подпоследовательность, которая перезапускает здесь, поэтому мы можем перезагрузить наш аккумулятор подпоследовательности, и первое предложение инварианта цикла все еще сохраняется ».
Что я не понимаю, допустим, моя последовательность 2 -3 4: почему maxendinghere когда-либо будет равна нулю? Нет подпоследовательности, сумма которой равна нулю.
(Цитаты из: http://wordaligned.org/articles/the-maximum-subsequence-problem)