循环不变式(loop invariant)
来源:互联网 发布:开封教务网络管理系统 编辑:程序博客网 时间:2024/05/17 22:33
循环不变式是一种条件式(必须满足的条件,对循环而言是保持不变的,无论循环执行了多少次),循环语句没执行一次,就要求中间的结果必须符合不变式的要求。
- (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; }}
0 0
- 循环不变式(Loop invariant)
- 循环不变式(loop invariant)
- 算法导论 第二章 循环不变式(loop invariant)
- 循环不变量(Loop invariant)
- loop invariant 循环不变量
- Loop Invariant 循环不变量
- 循环不变性(loop invariant)-证明算法的正确性的一种方法
- Loop Invariant Proof examples
- SIFT(scale invariant feature transform): 尺度不变特征变换
- SIFT(scale invariant feature transform): 尺度不变特征变换
- 循环不变式
- 循环不变式
- 循环不变式
- 循环不变式
- 循环不变式
- 循环不变式
- 循环不变式
- 灰度不变性LBP( gray scale invariant) 旋转不变性LBP(rotation invariant)旋转不变等价LBP(rotation & uniform invarian )
- 句子逆序
- UVA-10048(弗洛伊德)
- 剑指offer--面试题39:二叉树的深度
- 基于原生javascript的淡入淡出函数封装(兼容IE)
- iOS 10 UIScrollView详解(scrollview自带刷新UIRefreshControl)
- 循环不变式(loop invariant)
- 找出我的GID
- HDU-2015查找最大元素
- 音频播放\录音
- Android 开源项目源码解析 -->Android Universal Image Loader 源码分析(十四)
- Objective-c runnloop
- 2016ACM北京赛区网络赛第三题A simple Job
- BZOJ4245 [ONTAK2015]OR-XOR
- 快速排序解析