Доказательство правильности алгоритма максимального подмассива грубой силы

Я пытаюсь доказать правильность версии грубой силы проблемы максимального подмассива, приведенной ниже:

def max_subarray_bf(lst):
    left = 0
    right = 0
    max = lst[0]
    for i in range(len(lst)):
        current_sum=0
        for j in range(i, len(lst)):
            current_sum+=lst[j]
            if current_sum>max:
                max=current_sum
                left=i
                right=j
    return (left, right, max)

но я, кажется, застрял при разработке инварианта цикла, возможно, потому, что внутренний цикл изменяет глобальную переменную (max), из-за чего мне трудно изобразить то, что (max) представляет в инварианте цикла, соответствующем внутреннему циклу.

Моя попытка:

В целом алгоритм работает путем нахождения максимального подмассива из следующих подмассивов:

{[0],[0,1],...,[0,...,n]

 [1],[1,2],...,[1,...,n]

 .

 .

 .

 [n]}
  • Инвариант внутренней петли:
    • Current_sum - это сумма всех элементов в массиве [i...j]
    • Застрял здесь, потому что я не могу понять, что будет макс с точки зрения I и J, и, следовательно, влево и вправо

0 ответов

Другие вопросы по тегам