algorithm - 算法的不变量

标签 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 时不变量应该暗示正确的解决方案。

最佳答案

如果我理解你的问题,那么这就是我所说的:

初始化:总和从0开始,所以你的最大值是0

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

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

所以循环不变量是你的总和/最大值在任何给定时间是 a[0] + ... + a[i-1],并且只由你的数组中找到的数字组成。

关于algorithm - 算法的不变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53054902/

相关文章:

algorithm - 如何从非常大的集合中找到最佳参数组合?

c++ - 前置条件通常与不变量重叠吗?

Ada GNAT 证明 1 不是 >= 0

javascript - React Native - 不变违规

algorithm - 如何找到循环不变性并证明正确性?

algorithm - 在图中寻找最短的 4 边循环

algorithm - 访问最高值附近项目的最佳数据结构?

python - 寻找最大和距离

c - 没有返回值的循环不变式,可能吗?以及程序的正确性

c - Frama-C/WP 无法证明循环不变性