循环不变式

循环不变式就是在进行循环时,在每次循环都保持不变的逻辑表达式,相当于数学归纳法证明的“断言”。

算法导论第二章中关于循环不变式原文如下:

We state these properties of A[1 ‥ j -1] formally as a loop invariant

We use loop invariants to help us understand why an algorithm is correct. We must show three things about a loop invariant: 

  • Initialization: It is true prior to the first iteration of the loop.
  • Maintenance: If it is true before an iteration of the loop, it remains true before the next iteration.
  • Termination: When the loop terminates, the invariant gives us a useful property that helps show that the algorithm is correct.

这里举了插入排序的例子,每次循环从数组A中取出第j个元素插入有序区A[1 .. j-1],然后递增j。这样A[1 .. j-1]的有序性始终得到保持,这就是所谓的“循环不变”。

1. 初始化(循环第一次迭代之前)的时候,A[1 ‥ j -1]的“有序性”是成立的;
2. 在循环的每次迭代过程中,A[1 ‥ j -1]的“有序性”仍然保持;
3. 循环结束的时候,A[1 ‥ j -1]的“有序性”仍然成立。

循环不变性的定义跟数学归纳法的证明过程有些相似,在第一次循环的时候,取出第1个元素,排入有序区A[1],A是有序的,在每次循环中,都将插入一个元素到有序数组A中,同时保持A的有序,循环结束时,A中的有序依然成立,可以得出下述断言M(n),这个断言就是循环不变式:

M(n):每次循环从数组A中取出第j个元素插入有序区A[1 .. j-1],然后递增j,这样A[1 .. j-1]的有序性始终得到保持。

而其中的递增j,是为了让循环适时结束。

可以参考《程序员的数学》第四章内容。

 

 

转载于:https://www.cnblogs.com/hihilary/archive/2012/11/15/2772205.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值