一、基本概念
1、基本概念
数据
数据元素(数据的基本单位)
数据项(不可分割的最小单位)
数据对象(性质相同的数据元素的集合)
2、数据结构
存储结构
- 数据元素的存储
- 元素之间的关系的表示
- 顺序表示:一维数组
- 非顺序表示:指针
顺序存储结构:整个存储结构中只含数据元素本身的信息
链式存储结构:用一个和 Ki 在一起的附加信息指示 Ki+1 的存储位置
逻辑结构
- 数据元素之间的相互关系
- 集合:结构中的数据元素除了“同属于一个集合”外,没有其它关系
- 线型结构:结构中的数据元素之间存在一对一的关系
- 树型结构:结构中的数据元素之间存在一对多的关系
- 图状结构或网状结构:结构中的数据元素之间存在多对多的关系
两者关系
- 数据的逻辑结构和存储结构密不可分:
- 算法设计取决于所选定的逻辑结构
- 算法实现依赖于所采用的存储结构
3、数据类型
原子类型和结构类型;抽象数据类型(ADT)
4、算法(Algorithm)
高效率(High efficiency)与低存储量(Low memory
space)需求
5、三种出错处理方式的比较:
(1)用
exit语句终止执行
并报告错误
• 其优点是直观、嵌套层次少;缺点是中断函数的执行
• 故不适宜用在子函数中
(2)用
函数的返回值区别正确返回或错误返回
• 其优点是将错误返回给调用环境,由调用环境决定程序的下一步走向
(3)在函数的参数表中设置
整型变量,以区别正确返回或错误返回
• 其优点同上,并可判别多种类型的错误
二、算法效率的度量
1、问题规模(n)的函数
2、时间复杂度T(n)
与算法中基本操作重复执行的次数有关
𝑂(1) :常量时间阶𝑂 (𝑛) :线性时间阶𝑂( ) :平方阶𝑂 ( ) :k次方时间阶(k≥2)𝑂( ) :指数阶𝑂() :对数时间阶𝑂() :线性对数阶• 由于函数有如下的增长关系:𝑐 < 𝑙𝑜𝑔 2 𝑛 < 𝑛 < 𝑛𝑙𝑜𝑔 2 𝑛 < 𝑛 2 < 𝑛 3 < 2 𝑛 < 3 𝑛 < 𝑛! < 𝑛 𝑛• 所以阶之间有如下的关系:𝑂(1) < 𝑂( 𝑙𝑜𝑔 𝑛 ) < 𝑂(𝑛) < 𝑂(𝑛 𝑙𝑜𝑔 𝑛 ) < 𝑂(𝑛 2 ) < 𝑂(𝑛 3 ) < 𝑂(2𝑛 ) < 𝑂(𝑛!) < 𝑂(𝑛 𝑛 )
Tip:循环中只看最内层循环的语句执行次数的规律即可
例:冒泡排序法BubbleSort
min:0 max:n(n-1)/2
void BubbleSort(int a[], int n){
for(i=n-1,change=1;i>=1&&change;--i)
for(j=0,change=0;j<i;++j)
if(a[j]>a[j+1]){
y=a[j];
a[j]=a[j+1];
a[j+1]=y;
change=1;
}
}
3、空间复杂度S(n)
在计算机中运行时所需存储空间大小的度量,一般地,算法的空间复杂度指的是辅助空间