「算法导论」:到底什么是循环不变式?
来源:互联网 发布:四大咨询 知乎 编辑:程序博客网 时间:2024/05/17 07:28
算法导论第二章中提出了一个概念---“循环不变式”,书上说:
在for循环(循环变量为j)的每次迭代开始,包含a[1..j-1]的子数组构成了当前排序好的子数组,余下的子数组a[j+1..n]对应于仍未处理的部分,而元素a[1..j-1]实际上就是原来排在桌子上的那a[1..j-1]的部分,但现在已接按序排列。把a[1..j-1]的这些性质形式地表示为一个循环不变式。
我的理解是,循环不变式表达的是在循环过程中的一种状态。第一、对于插入排序来说,每轮循环利用的都是原数组中的前j-1个元素,这里体现的是“不变”,意思是对于每一轮的子集a[1..j-1],它所有的元素就是原数组中前j-1个元素这个事实是不变的。而对于选择排序来讲,这里的不变指的又是前j-1个元素是整个数组中最小的j-1个元素这个事实不变。对于其他的循环在特定环境下表现出的意义也不尽相同。第二、在第j轮循环中,元数组的前j-1个元素已经是按约定排好序的了。循环是外部动作,而“不变”及“排好序”是相对的一种状态,只有这样才有充足的理由去类似按归纳法的思想来证明结论的正确性。我觉得这个概念给的相对模糊,看个人理解。
循环不变式的作用:
主要用来帮助理解算法的正确性,关于循环不变式,必须证明以下三个性质:
初始化:循环的第一次迭代之前,它为真。(归纳中的n=1)
保持:如果循环的某次迭代之前它为真,那么下次迭代之前它仍为真。(如果n=i正确,则n=i+1也正确)
终止:在循环终止时,不变式为我们提供了一个有用的性质,该性质有助于证明算法是正确的。(得出结论当n->无穷时,当然,这里一般是有界的n,则我们要借助循环终止时的状态来利用“保持”一条的规则来推出结论是正确的)
对于这三个性质的使用,书上有对插入排序分析的一个例子,尤其是第三条的终止条件是和归纳法思想差别比较明显的一步。
- 「算法导论」:到底什么是循环不变式?
- 算法导论 第二章 循环不变式(loop invariant)
- 算法导论-循环不变式、插入排序、归并排序
- 算法导论学习-数学归纳法与循环不变式理解
- 对算法导论中用循环不变式证明算法正确性的理解
- 《算法导论》读书笔记(一)——插入排序与循环不变式
- 《算法导论》----------什么是算法?
- 算法学习二:循环不变式证明算法的正确性
- 循环不变式
- 循环不变式
- 循环不变式
- 循环不变式
- 循环不变式
- 循环不变式
- 循环不变式
- 算法导论 循环单链表
- 算法导论 循环双链表
- 算法基础-使用循环不变式解决插入排序问题
- 视频广告屏蔽网站优化笔记
- Unicode字符集和多字节字符集关系
- 【Matlab】三维数据差值 查表 拟合
- android开源框架android-async-http使用
- JNI学习积累之一 ---- 常用函数大全
- 「算法导论」:到底什么是循环不变式?
- 微信WeixinJSBridge API的简单介绍
- Android通过Intent传输包含自定义类的ArrayList
- 修改linux文件权限命令:chmod
- 使用vCenter 5.5模板创建Linux系统后网卡问题处理
- 读取Jtable某个单元格的内容(刚刚被编辑的单元格)
- Myeclipse配置Tomcat 7 简要步骤
- poj 1787 Charlie's Change 题解(动态规划)
- 验证码