循环不变式

考虑上一篇的插入排序,在for循环的每次迭代开始,包含元素A[0...i-1]的子数组是当前排序好的,剩余的数组元素A[i...arrlen]是仍未排序的。我们把A[0...i-1]的这个性质称为一个循环不变式 

循环不变式(loop invariants)不只是一种计算机科学的思想,准确地说是一种数学思想。在数学上阐述了通过循环(迭代、递归)去计算一个累计的目标值的正确性, 属于基础数学的范畴,类似与数学归纳法。

循环不变式主要帮助我们理解算法的正确性。关于循环不变式,我们需要证明三条性质:

1. 初始化: 循环第一次迭代之前,为真

2. 保持: 如果循环某次迭代之前它为真,那么下次迭代之前它仍为真

3. 终止: 如果程序可以在某种条件下终止,那么在终止的时候,就可以得到自己想要的正确结果

我们可以看到,插入排序的循环不变式(在for循环的每次迭代开始,包含元素A[0...i-1]的子数组是当前排序好的,剩余的数组元素A[i...arrlen]是仍未排序的)是满足这三个性质的。

posted @ 2018-09-19 21:05  二狗啸地  阅读(168)  评论(0编辑  收藏  举报