程序的本质
1、程序是为了实际问题而存在,从本质上而言,程序是解决问题的步骤描述
2、程序鉴评:
(1)、用尽量少的内存空间解决问题
(2)、用尽量少的步骤去解决问题
数据的艺术
1、数据结构的起源:数据结构主要研究非数值计算程序问题中的操作对象以及它们之间的关系
2、数据:程序的操作对象,用于客观描述事物
数据元素:组成数据的基本单位
数据对象:性质相同的数据元素的集合
数据项:一个数据元素由若干个数据项组成
用此图更直观其之间的关系:
3、数据元素之间不是独立的,存在特点的关系,这些关系即结构
4、数据结构指数据对象中数据元素之间的关系
如:数组中各元素之间存在固定的线性关系
5、逻辑结构
(1)集合结构:数据元素之间没有特别的关系,仅同属相同集合
(2)线性结构:数据元素之间是一对一的关系
(3)树形结构:数据元素之间存在一对多的关系
(4)图形结构:数据元素之间是多对多的关系
6、物理结构
概念:逻辑结构在计算机的存储形式
(1)顺序存储结构:将数据存储在地址连续的存储单元里
(2)链式存储结构:将数据存储在任意的存储单元里,通过保存地址的方式找到相关联的数据元素
程序的灵魂——算法
1、数据结构只是静态地描述了数据元素之间的关系
2、高效的程序需要在数据结构的基础上设计和选择算法
3、高效的程序=恰当的数据结构+合适的算法
4、算法的定义: 是特定问题求解步骤的描述
算法是独立存在的一种解决问题的方法好思想
对于算法而言,语言并不重要,重要的是思想
5、算法的特性:
输入、输出、又穷性、确定性、可行性
审判程序的灵魂
1、算法的时间复杂度
大O表示法
(1)、算法效率严重依赖于操作数量
(2)、在判断时首先关注操作数量的最高次项
(3)、操作数量的估算可以作为时间复杂度的估算
最好与最坏:
(1)意义:当算法在最坏的情况下仍能满足需求时,可以推断,算法的最好情况和平均情况都满足需求
在没特殊说明时,我们所分析的算法的时间复杂度都是指最坏的时间复杂度
2、算法的空间复杂度
(1)、通过计算算法的存储空间实现:S(n) = O(f(n))
其中n为问题规模,f(n)为为在问题规模为n所占用存储空间的函数
大O表示法同样适用于算法的空间复杂度
3、空间和时间的需求
(1)、多数情况下,算法执行时所用的时间更令人关注
(2)、如果有必要,可以通过增加空间复杂度来降低时间复杂度