《算法导论》:关于循环不变式
《算法导论》:关于循环不变式
试着理解一下《算法导论》中提到的循环不变式的概念,作者水平有限,如果内容存在纰漏的话希望大家批评指出。
算法导论在讨论插入排序算法的时候引入了循环不变式的概念,书中的描述是这样的:
事实上,元素A[1…j-1]就是原来在位置1到j-1的元素,但现在已按序排列。我们把A[1…j-1]的这些性质形式地表示为一个循环不变式
其中元素A[1…j-1]指的是排序算法左端已经按序排列的元素。
显然,我们能从原书的描述中明确几点:
- 循环不变式是算法性质的抽象,以插入排序为例,循环不变式表示的是左端元素的有序性和不变性(即没有引入循环上界外的元素到其中)
- 循环不变式能够帮我们证明算法的正确性,证明循环不变式的正确性即为证明算法的某些性质
那么问题来了,循环不变式的目的是为了帮助我们理解算法和证明算法的正确性,但具体该怎么做呢?
书上给出了解法:
关于循环不变式,我们必须证明三条性质:
初始化: 循环的第一次迭代之前,它为真
保持: 如果循环的某次迭代之前它为真,那么下次迭代之前它仍为真
终止: 在循环终止时,不变式为我们提供一个有用的性质,该性质有助于证明算法是正确的
简单来说,就是证明一个过程的初值符合要求,每次递归关系符合要求,结果符合要求。(很容易联想到数学归纳法,但循环不变式的证明存在终止,并不是无限地循环)
拿书中给出的插入排序的伪代码为例:
这里用循环不变式代表左侧已排序序列的有序性和元素不变性
1 for j=2 to A.length
2 key = A[j]
3 i = j - 1
4 while i>0 and A[i]>key
5 A[i+1] = A[i]
6 i = i - 1
7 A[i+1] = key
初始化: 在第一次循环迭代前(即j=1时)此时已排序序列仅有元素A[1],显然有序且符合元素不变性
保持: 因为在循环中j的不断右移并向左侧插入数据,显然在循环时左侧的循环不变性是保持的(这里仅用来理解循环不变式所以不给出详细的数学证明)
终止: 当循环终止时(即j =A.length+1时),此时A[1…j-1]为整个数组,显然满足元素不变性,且可推断出数组已经有序,满足有序性
三者证正,即可证明循环不变式的正确性
《算法导论》:关于循环不变式相关推荐
- 算法导论之图的最小生成树
引出最小生成树,是提到电子线路设计时,要把数个元件的引脚连接在一起,使其电位相同.使n个引脚互相连通,可以使用n-1条连接线,每条连接线连接两个引脚.寻求连接线最少的方案,是最小生成树的应用.将电子线 ...
- 你是如何坚持读完《算法导论》这本书的?(帖子收集)
你是如何坚持读完<算法导论>这本书的? <算法导论>不够猛,答者顺便补充 "你是如何坚持读完<计算机编程的艺术>这本书的?" 罗必成: CLRS ...
- 算法导论第一,第二部分总结
最近正在看一部大著<算法导论>,这本书无论从严密还是从思维上面都达到了一个难以企及的高度.里面的算法分析与设计基本上都在理论性上,如果想实用的话自己还需要看点其它的东西.接下来,就自己学了 ...
- 算法导论-3.递归部分习题选
这一部分主要算法导论中递归式.堆排序和快速排序章节里选择的对我而言较有价值的题目. 练习4.1-1 证明 $T(n)=T(\lceil n/2\rceil)+1$ 的解为 $O(\lg n)$ . 解 ...
- 《算法导论》习题5.3-1 ~ 5.3-7
<算法导论>习题 5.3.1 - 5.3.7 5.3-5 带星号我抄了一下题目, 5.3-6 比较有意思我抄了一下题目, 其他的题可以自己对照书(原书第三版). 5.3-1 直接考虑 ...
- 算法导论中英文版下载
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 算法导论 ...
- 你是如何坚持读完《算法导论》这本书的?
你是如何坚持读完<算法导论>这本书的? <算法导论>不够猛,答者顺便补充 "你是如何坚持读完<计算机编程的艺术>这本书的?" 罗必成: CLRS ...
- 我眼中的算法导论 | 第一章——算法在计算中的作用、第二章——算法基础
一个小白的算法学习之路.读<算法导论>第一天.本文仅作为学习的心得记录. 算法(Algorithm) 对于一个程序员来说,无论资历深浅,对算法一词的含义一定会或多或少有自己的体会,在< ...
- 算法导论第三版第二章思考题答案
算法导论第三版第二章思考题答案 第二章思考题 算法导论第三版第二章思考题答案 2.1 2.2 2.3 2.4 汇总传送门 2.1 #include<iostream> using name ...
- 算法导论/第一部分_基础知识
算法导论: 基础知识 Chapter 1 算法在计算中的作用 1.1 算法 1.2 作为技术的算法 Chapter 2 算法基础 2.1 插入排序 练习: 2.2 分析算法 插入算法的分析 增长量级 ...
最新文章
- 长篇自动驾驶技术综述论文(上)
- Node.js 报语法错误 SyntaxError: Unexpected identifier
- 高性能WEB开发 - HTTP服务器篇
- 施一公:让科技工作成为富有吸引力的工作
- java 非静态 初始化_Java非静态代码块和实例初始化过程
- Vue 封装的过渡与动画
- JSP听课笔记(一)
- 没有方案你抱怨;有了方案你会认真看吗?
- 【语音去噪】基于matlab先验信噪比的维纳滤波算法语音去噪【含Matlab源码 572期】
- SAP WM + PDA项目 来料入库流程
- 移动端实现点击按钮复制文本功能
- SARS-CoV2_ARTIC_Illumina新冠病毒分型和突变分析
- 钉钉群机器人通知中的图片,突然不显示了
- 迪文串口屏幕通信问题
- 润雅信息完成B轮融资 大数据平台赋能汽车销售 1
- Elasticsearch 跨机房灾备方案实战(一) —— 消息队列实现双写
- 永久60服务器消息,魔兽世界怀旧服:永久60级已经成为了另一个游戏,这如你所愿吗?...
- 毒蛙(Vuze)执行文件Azureus.exe再分析
- docker和kvm的区别,简洁大白话篇,两者的优势对比
- 【Kettle Spoon】课程要点简记