一、数据、数据元素、数据项、数据对象、数据结构
- 数据:信息的载体,描述客观事物的数、字符,以及所有能输入到计算机中,被计算机程序
识别和处理
的符号的集合 - 数据元素:数据元素是数据的
基本单位
,通常作为一个整体进行考虑和处理 - 数据项:一个数据元素可由若干个数据项组成,数据项是数据元素的
不可分割的最小单位
- 数据对象:具有相同性质的
数据元素
的集合,是数据的一个子集 - 数据结构:由某一
数据对象
及该对象中所有数据元素之间的关系
组成
二、数据结构三要素
- 逻辑结构——从解决问题的需要出发,为实现必要的
功能
所建立的数据结构,它属于用户的视图,是面向问题
的 - 物理/存储结构——指数据如何在计算机中存放,是
数据逻辑结构的物理存储映象
,是属于具体实现的视图,是面向计算机
的 - 数据的运算——针对某种逻辑结构,定义基本运算
所谓数据结构
:按照逻辑关系组织起来的一批数据, 按一定的存储方法把它存储在计算机中, 并在这些数据上定义了一个运算的集合
常见的逻辑结构:
- 线性结构:一对一
- 树形结构:一对多
- 图/网状结构:多对多
常见的存储结构:
- 顺序存储:逻辑相邻的元素,存储位置也相邻
- 链式存储:逻辑相邻,物理位置不一定相邻,关系通过
指针
表示 - 索引存储:元素存储在不同区域,通过
索引表
存储元素位置 - 散列存储:根据
关键字
直接计算出元素的物理地址
三、算法
DEF.
一个有穷的指令集
,这些指令为解决某一特定任务规定了一个运算序列
特性:
- 输入:0或多个
- 输出:1或多个
- 确定性:每步定义确切、无歧义
- 有穷性:每条指令执行次数有限
- 有效性:每条指令执行时间有限
算法与数据结构:
- 运算的
定义
直接依赖于逻辑结构
- 运算的
实现
依赖于存储结构
四、程序性能
程序性能——运行一个程序所需要的内存大小和时间
- 空间复杂性
- 时间复杂性
4.1 空间复杂性
空间复杂性(Space complexity) :指运行完
一个程序所需要的内存大小。
程序所需要的空间 の 构成 :
指令
空间(Instruction space):存储经过编译之后的程序指令所需的空间。- 指令空间的数量通常取决于一些物理因素
- 如编译器、编译器选项、目标计算机
- 不同的编译器产生不同的程序/目标代码
数据
空间(Data space):存储所有常量和变量
所需的空间- 简单常变量
- 结构变量
- 数组空间
- 动态分配的空间
环境栈
空间(Environment stack space):保存函数调用返回
时恢复运行所需要的信息- 返回地址
- 被调用函数的所有局部变量及形式参数的值
- 编译器也将影响环境栈所需要的空间
空间复杂性 の 度量:
程序所需的空间 无法精确分析,但可以确定某些部分的空间需求,这些部分依赖于所解决问题实例的特征。
实例特征:包含决定问题规模
的那些因素
如:
- 对n个元素排序:实例特征为n
- 两个n x n矩阵相加:实例特征为n
- 两个m x n矩阵相加:实例特征为m,n
基本公式: S ( p ) = c + S p ( 实例特征 ) S(p) = c + S_p(实例特征) S(p)=c+Sp(实例特征)
- c为固定部分,独立于实例特征;如指令空间、简单变量、常量所占空间
- S p S_p Sp为可变部分;如动态分配的空间、递归栈空间
由此可见,当需要分析空间复杂性时,应该 (1) 确定实例特征;(2) 估算 S p S_p S