数据结构–基础
数据结构是相互之间存在一种或者多种特定关系的数据元素的集合。
根据数据元素之间关系的不同特性,通常有下列4种基本机构:
1.集合
该结构的数据元素间的关系是“属于同一个集合”。
2.线性结构
该结构的数据元素之间存在着一对一的关系。
3.树形结构
该结构的数据元素之间存在着一对多的关系。
4.图状结构或网状结构
该结构的数据元素之间存在着多对多的关系,也称网状结构。
算法
概念
算法是针对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。
此外,一个算法还具有下列5个重要特性:
- 有穷性 一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都在有穷时间内完成。
- 确定性 算法中每一条指令必须有确切的含义,读者理解时不会产生二义性。
- 可行性 一个算法是能行的,即算法中描述的操作都是通过已经实现的基本运算执行有限次来实现的。
- 输入 一个算法有零个或多个输入,这些输入取自于某个特定对象的结合。
- 输出 一个算法有一个或多个输出,这些输出是同输入有着某种特定的关系。
算法效率的度量
例如,在如下所示的两个N*N矩阵相乘的算法中,“乘法”运算时“矩阵相乘问题”的基本操作。整个算法的执行时间与该基本操作(乘法)重复执行的次数 n 3 n^3 n3成正比,记作T(n) = O( n 3 n^3 n3)①
for(int i = 0; i<=n; i++) {
for(j = 0; j<=n; j++) {
c[i][j] = 0;
for(k = 0; k<=n; k++) {
c[i][j] += a[i][k]*b[k][j];
}
}
}
一般情况下,算法中基本操作重复执行的次数是问题规模 n n n的某个函数 f ( n ) f(n) f(n),算法的时间度量记作 T ( n ) = O ( f ( n ) ) T(n) = O(f(n)) T(n)=O(f(n))。它表示随问题规模 n n n的增大,算法执行时间的增长率和 f ( n ) f(n) f(n)的增长率相同,称作算法的渐进时间复杂度(asymptotic time complexity),简称时间复杂度。
空间复杂度(space complexity)作为算法所需存储空间的度量,记作 S ( n ) = O ( f ( n ) ) S(n) = O(f(n)) S(n)=O(f(n))