Algorithm 如何找到循环不变量并证明其正确性?
我正在学习正确性,努力找到合适的循环不变量并证明其正确性 我认为循环不变量应该是t=正值的和,但我不知道如何正确地写它,或者有其他循环不变量吗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 =
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
也正确地为0t
- 迭代后,
和i==1
对于第一个元素是正确的t
在正式开始之前,考虑循环的“保持不变的内容”和“变化的内容”有时是有帮助的。*对于编写的循环,我们有以下感兴趣的变量:
-要求和的数字数组A
-n
中元素的整数A
-如前所述,我假设它是正的最终总和t
-索引变量;有时被称为变体i
A
不变。数组中的元素数n
不变。如前所述,总和t
可能会改变。索引变量i
将更改
关于循环,人们通常说,i
是一个变体。它增加每次迭代,并将其与n
进行比较,这就是退出循环的原因
我感兴趣的不变量是,t
将始终表示到目前为止计算出的正和。例如,在第一次迭代中:
- 在迭代之前,
和i==0
也正确地为0t
- 迭代后,
和i==1
对于第一个元素是正确的t
欢迎来到SO。请阅读非常感谢…第一次使用Stackoverflow,我将改进..循环不变量是在每次循环迭代前后都成立的条件。您的解决方案不正确,因为t只是上一次迭代后A中所有正值的总和。您好,循环变量:{A[i]>0和t=t+A[i]}正确吗?欢迎使用。请阅读非常感谢…第一次使用Stackoverflow,我将改进..循环不变量是在每次循环迭代前后都成立的条件。您的解决方案不正确,因为t只是上一次迭代后A中所有正值的总和。嗨,循环变量:{A[i]>0和t=t+A[i]}正确吗?