程序设计 = 数据结构 + 算法
数据结构
数据结构中的数据
早期计算机用于数值计算,而现在的数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。
数据:描述客观事物的符号,计算机可以操作的对象,能够被计算机识别并输入给计算机处理的符号集合。包括整形等数值类型,还有声音、图像、视频等非数值类型。
数据元素:组成数据的有一定意义的基本单位,在计算机中通常作为整体处理,也称为记录。 类比于类和对象,人中的你我他。
数据项:数据元素的最小单位,一个数据元素可以由若干数据项组成,不可分割。人身上的耳鼻口手脚。
数据对象:性质相同的元素的集合,是数据的子集。可以将数据对象简称为数据。
数据项 < 数据元素 < 数据
数据结构:相互之间存在一种或多种特定关系的数据元素的集合
数据结构中的结构
逻辑结构是面向问题的,物理结构是面向计算机的。
逻辑结构:数据对象中数据元素之间的相互关系
- 集合结构:除了同属于一个集合外,元素之间没有其他关系。
- 线性结构:数据元素之间是一对一的关系。
- 树形结构:数据元素存在一对多的层次关系
- 图形结构:数据元素存在多对多的关系
物理结构:数据的逻辑结构在计算机上的存储形式,主要是对内存而言,外存的数据组织用文件结构来描述。
- 顺序存储结构:数据元素存放在地址连续的存储单元中,数据间逻辑关系和物理关系是一致的。例如数组。
- 链式存储结构:数据元素存放在任意的存储单元中,存储单元可以是连续的也可以是不连续的。存储关系 != 逻辑关系。
抽象数据类型
数据类型:性质相同的值的集合以及定义在这个集合上的一些操作的总称
- 原子类型(整型):不可分割的基本类型。
- 结构类型(整型数组):若干个类型组合而成。
抽象数据类型(Abstract Data Type, ADT):一个数学模型以及定义在这个模型上的一组操作
分解 抽象 数据隐藏
算法
算法:解决特定问题的求解步骤的描述,在计算机中为有限的指令集合,每条指令表示一个或多个操作
特性:
1. 输入输出:0或多个输入,至少一个输出
2. 有穷性:算法在执行了有限的步骤之后,自动结束而不会进入无限循环
3. 确定性:每一个步骤都有确定的含义,没有二义性
4. 可行性:算法的每一步是可行的,能够通过执行有限的次数完成
设计要求:
1. 正确性:语法合法的输入非法的输入刁难的输入 。
2. 可读性: 便于阅读、理解和交流
3. 健壮性:对于非法的输入数据也能处理,不产生异常
4. 时间效率高和存储量低
算法时间复杂度:进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数
渐进时间复杂度:随着问题规模n的扩大,算法的时间增长率和f(n)的增长率相同
时间复杂度的计算:最高阶
函数的渐进式增长
常数阶<对数阶<多项式<指数阶<阶乘
nlogn为n2