假设该算法给出了子数组的最大和。并让a []为长度为n的数组。
randmax = 0
maximum = 0
for 0 <= i < n
randmax = randmax + a_i
if randmax > max
max = randmax
if randmax < 0
randmax = 0
我如何找到一个循环不变式,它在执行前,当然在循环迭代之前和之后以及在n-1时成立,因此该不变式应暗示正确的解决方案。
答案 0 :(得分:0)
如果我理解您的问题,那么这就是我的意思:
初始化:总和为0,因此最大值为0
维护:到目前为止,最大值是a [0] + ... + a [i-1]的总和
终止:最大值是数组a [0] + ... + a [n-1]的总和。
因此循环不变式是在任何给定时间的总和/最大值为a [0] + ... + a [i-1],并且仅由数组开头的数字组成。 / p>