算法的不变性

时间:2018-10-29 22:37:34

标签: algorithm invariants loop-invariant

假设该算法给出了子数组的最大和。并让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时成立,因此该不变式应暗示正确的解决方案。

1 个答案:

答案 0 :(得分:0)

如果我理解您的问题,那么这就是我的意思:

初始化:总和为0,因此最大值为0

维护:到目前为止,最大值是a [0] + ... + a [i-1]的总和

终止:最大值是数组a [0] + ... + a [n-1]的总和。

因此循环不变式是在任何给定时间的总和/最大值为a [0] + ... + a [i-1],并且仅由数组开头的数字组成。 / p>