证明蛮力最大子阵列算法

时间:2018-02-20 22:15:57

标签: algorithm brute-force proofs

我试图证明下面给出的最大子阵列问题的暴力版本的正确性:

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和i的最大值 j,因而左右

0 个答案:

没有答案