博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
循环不变式(loop invariant)
阅读量:5116 次
发布时间:2019-06-13

本文共 818 字,大约阅读时间需要 2 分钟。

循环不变式是一种条件式(必须满足的条件,对循环而言是保持不变的,无论循环执行了多少次),循环语句没执行一次,就要求中间的结果必须符合不变式的要求。

  • (1)进入循环语句时,不变式必须成立;
  • (2)循环语句的循环体不能破坏不变式。也就是说,循环体开始循环时不变式成立,结束时也必须成立;
  • (3)如果循环语句终止时不变式,依旧成立,那么至少说明,循环在保持循环不变式上没有犯错。
// (**) 不变式在进入循环之前必须成立while () {    // 循环体开始    ...    // 循环体结束    // (**) 不变式在此处也必须成立}

1. 插入排序的循环不变式

插入排序由 N-1 趟(pass)排序组成。对于 P = 1 趟到 P = N-1 趟,插入排序保证从位置 0 到位置 P 上的元素为已排序状态(sorted)。

也即从位置 0 到位置 P-1 上的元素是已排序的。

typedef int ElementType;void InsertionSort(ElementType* A, int N) {    int j, P;    ElementType Tmp;    for (P = 1; P < N; ++P) {        Tmp = A[P];        // 应用循环不变式的地方        // 因为前 0 ~ P-1 位置上所有的元素都是位于已排序的状态;        // 所以当第一次出现 A[j-1] <= Tmp; 便找到了 Tmp 应该插入的位置        for (j = P; j > 0 && A[j-1] > Tmp; --j) {            A[j] = A[j-1];        }        A[j] = Tmp;    }}

转载于:https://www.cnblogs.com/mtcnn/p/9423552.html

你可能感兴趣的文章
多表查询,初识pymysql模块
查看>>
Linux基础之-Bash命令优先级
查看>>
信息系统项目管理师(高级)考试大纲
查看>>
[zoj]3575 Under Attack III
查看>>
力扣——最小路径和
查看>>
Github fork其他项目的分支与主干保持同步
查看>>
Create-React-App创建antd-mobile开发环境
查看>>
【设计模式】开篇
查看>>
Query意图分析:记一次完整的机器学习过程(scikit learn library学习笔记)
查看>>
Windows下搭建PHP开发环境
查看>>
2015湖南省选集训DAY5——work(BZOJ4177)
查看>>
hdu4190 简单的二分法
查看>>
Linux 解决文件删除,但并没有改变磁盘可用性
查看>>
C++ Regsvr32订购具体解释
查看>>
Android Fragment 真正彻底的解决(下一个)
查看>>
Android 最火高速开发框架AndroidAnnotations使用具体解释
查看>>
ASP.NET之Application、Session和Cookie的差别
查看>>
微信5.0公众平台企业服务号和订阅号怎样申请?
查看>>
OSI七层模型具体解释
查看>>
gcc常用选项
查看>>