Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何找到循环不变量并证明其正确性?_Algorithm_Correctness - Fatal编程技术网

Algorithm 如何找到循环不变量并证明其正确性?

Algorithm 如何找到循环不变量并证明其正确性?,algorithm,correctness,Algorithm,Correctness,我正在学习正确性,努力找到合适的循环不变量并证明其正确性 我认为循环不变量应该是t=正值的和,但我不知道如何正确地写它,或者有其他循环不变量吗 SumPos(A[0..n - 1]) // Returns the sum of the positive numbers in an array A of length n. We // assume that the sum of the numbers in an array of length zero is zero. t = 0 i =

我正在学习正确性,努力找到合适的循环不变量并证明其正确性

我认为循环不变量应该是t=正值的和,但我不知道如何正确地写它,或者有其他循环不变量吗

SumPos(A[0..n - 1])
// Returns the sum of the positive numbers in an array A of length n. We
// assume that the sum of the numbers in an array of length zero is 
zero.
t = 0
i = 0
while i != n do
 if A[i] > 0
 t = t + A[i]
 i = i + 1
 return t

在正式开始之前,考虑循环的“保持不变的内容”和“变化的内容”有时是有帮助的。*对于编写的循环,我们有以下感兴趣的变量:

  • A
    -要求和的数字数组
  • n
    -
    A
    中元素的整数
  • t
    -如前所述,我假设它是正的最终总和
  • i
    -索引变量;有时被称为变体
那么每次迭代都会发生什么变化呢?数组
A
不变。数组中的元素数
n
不变。如前所述,总和
t
可能会改变。索引变量
i
将更改

关于循环,人们通常说,
i
是一个变体。它增加每次迭代,并将其与
n
进行比较,这就是退出循环的原因

我感兴趣的不变量是,
t
将始终表示到目前为止计算出的正和。例如,在第一次迭代中:

  • 在迭代之前,
    i==0
    t
    也正确地为0
  • 迭代后,
    i==1
    t
    对于第一个元素是正确的
但是,正如所写的,return语句排除了数组第一个元素之外的任何处理。从理论到实践,您将如何修复实现

*对于迂腐的人来说,限定词很重要,因为严格来说,“不变量”是指循环的每次迭代都不会发生变化——不会发生变化,或者总是成立的。所以许多语句对于循环是不变的!例如,我母亲的名字在循环中是不变的


在正式开始之前,考虑循环的“保持不变的内容”和“变化的内容”有时是有帮助的。*对于编写的循环,我们有以下感兴趣的变量:

  • A
    -要求和的数字数组
  • n
    -
    A
    中元素的整数
  • t
    -如前所述,我假设它是正的最终总和
  • i
    -索引变量;有时被称为变体
那么每次迭代都会发生什么变化呢?数组
A
不变。数组中的元素数
n
不变。如前所述,总和
t
可能会改变。索引变量
i
将更改

关于循环,人们通常说,
i
是一个变体。它增加每次迭代,并将其与
n
进行比较,这就是退出循环的原因

我感兴趣的不变量是,
t
将始终表示到目前为止计算出的正和。例如,在第一次迭代中:

  • 在迭代之前,
    i==0
    t
    也正确地为0
  • 迭代后,
    i==1
    t
    对于第一个元素是正确的
但是,正如所写的,return语句排除了数组第一个元素之外的任何处理。从理论到实践,您将如何修复实现

*对于迂腐的人来说,限定词很重要,因为严格来说,“不变量”是指循环的每次迭代都不会发生变化——不会发生变化,或者总是成立的。所以许多语句对于循环是不变的!例如,我母亲的名字在循环中是不变的


欢迎来到SO。请阅读非常感谢…第一次使用Stackoverflow,我将改进..循环不变量是在每次循环迭代前后都成立的条件。您的解决方案不正确,因为t只是上一次迭代后A中所有正值的总和。您好,循环变量:{A[i]>0和t=t+A[i]}正确吗?欢迎使用。请阅读非常感谢…第一次使用Stackoverflow,我将改进..循环不变量是在每次循环迭代前后都成立的条件。您的解决方案不正确,因为t只是上一次迭代后A中所有正值的总和。嗨,循环变量:{A[i]>0和t=t+A[i]}正确吗?