我试图证明下面给出的最大子阵列问题的暴力版本的正确性:
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]}