读书笔记 《算法导论》 C2
来源:互联网 发布:在iphone编程 编辑:程序博客网 时间:2024/06/05 13:30
Chapter 2
Author:Single Rush
算法基础
Date : 2017.3.24
算法基础
本章由插入排序引入,但我将会把本章中的插入排序、归并排序,第六章的堆排序,第七章的快速排序,第八章的计数排序、基数排序、桶排序,以及另外一些我希望能补充进来的排序放在后面章节的笔记中一起分析。而在本章的笔记中我们重点将讲述算法的分析与设计基础。
循环不变式与算法的正确性,循环不变式将在后续章节中证明算法的正确性。
循环不变式的三条性质:
- 初始化:循环的第一次迭代之前,它为真。
- 保持:如果循环的某次迭代之前它为真,那么下次迭代之前它仍为真。
- 终止:在循环终止时,不变式为我们提供一个有用的性质,该性质有助于证明算法是正确的。
伪代码的一些约定:
1. 缩进表示块结构。
2. while、for与repeat-until等循环结构以及if-else等条件结构与C、C++等等中的那些结构有类似解释。其中向上叠加用关键字to,向下递减用关键字downto。当循环计数器以大于1的一个量改变时,该改变量跟在可选关键字by之后。
3. 符号“//”表示该行后面部分是注释。
4. i=j=e,表示将e的值赋给变量i和j。
5. 变量一般为局部变量,如无显式说明,一般不使用全局变量。
6. 数组元素通过“数组名[下标]”来访问。
7. 复合数据通常被组织成对象,对象又由属性组成。我们使用许多面向对象编程语言中创建的语法来访问特定的属性:对象名后跟一个点再跟属性名。
8. 我们按值把参数传递给过程:被调用过程接收其参数自身的副本。
9. 一个return语句立即返回到调用过程的调用点。我们规定伪代码中允许在单一的return语句中返回多个值。(此处需加注意,如有时间,我会在后面的笔记中详细描述)
10. 布尔运算符“and”和“or”都是短路的。
11. 关键词“error”表示因为已被调用的过程情况不对而出现了一个错误。
算法分析即预测算法需要的资源。相比于内存、通信带宽、硬件资源,我们“通常”更关心计算时间(时间复杂度)。但这并不绝对,如在分布式存储系统中,我们可能会发现带宽资源更重要,我们可能会通过增加计算复杂度来降低带宽的使用。
而时间复杂度、空间复杂度等等,我们也将在下一章中详细分析。当然这是最重要的,因为算法分析后,才能算法设计!
之后是算法设计,主要提到的是“分治法”,我将这一部分与第四章“分治策略”结合放在第四章的笔记中,此处便不多提。
完结
2017.3.24
CONTACT ME
- 读书笔记 《算法导论》 C2
- [算法导论读书笔记]二项堆
- 算法导论读书笔记1
- 算法导论读书笔记2
- 《算法导论》读书笔记
- 读书笔记 《算法导论》 C1
- 读书笔记 《算法导论》 C3
- 读书笔记 《算法导论》 C4
- 读书笔记 《算法导论》 C5
- 读书笔记 《算法导论》 C15
- 读书笔记 《算法导论》 Appendix
- [算法导论读书笔记]Kruskal算法
- [算法导论读书笔记]Prim算法
- [算法导论读书笔记]Dijkstra算法
- 算法导论读书笔记(插入排序)
- 算法导论读书笔记 第五章
- [算法导论读书笔记]拓扑排序
- [算法导论读书笔记]huffman编码
- 抒发一下这些天用django做web项目的一些体会
- Node.js Express连接mysql完整的登陆注册系统(windows)
- Android工程师面试题大全
- 欢迎使用CSDN-markdown编辑器
- 企业管理软件如何选型?看完后恍然大悟
- 读书笔记 《算法导论》 C2
- 从编译OpenGL库到我的第一个颜色变化的三角形-Shader
- 9-4修改属性的装饰器
- 语言控制台如何设置局部字体和背景的颜色
- 网易OpenStack部署运维实战
- 模仿微信,android bottom navigation的实现
- KVM虚拟化源码分析之KVM_TOOLS(一)
- 加载资源之路径问题
- MYSQL基础(DML)