1 相关术语
- 数据:描述客观事物的数值、字符以及能输入并被处理的各种符号集合。
- 数据元素:组成数据的基本单位,是数据集合的个体
- 数据对象:性质相同的数据元素的集合,是数据的一个子集。
- 数据结构:互相之间存在一种或多种特定关系的数据元素集合。
2 数据结构的三要素
2.1 逻辑结构
概念:数据对象中数据元素之间的相互关系。分为集合结构、线性结构、树状结构以及图状结构。
分类:
- 线性结构:线性表、栈、队、字符串、数组、广义表
- 非线性结构:树、图
2. 2存储结构
概念:逻辑结构在计算机中的存储映像。分为顺序映像(顺序存储)和非顺序映像(链式存储)。
分类:
- 顺序存储:例如数组。数据元素存放在地址连续的存储单元,逻辑关系和物理关系一致
- 链式存储:数据元素存放在任意的存储单元,可以连续可以不连续。数据存储关系不能反映逻辑关系,因此需要用一个指针存放数据元素的地址
- 运算:增删查改等。
3 算法
3.1 算法描述
- 算法的特性:
- 有限性:有限步骤执行完,不能形成无限循环
- 确定性:每个步骤有具体含义、无二义性
- 可行性:原则上能精确进行,操作可通过已实现的基本运算执行有限次而完成
- 输入:有多个或0个输入
- 输出:至少有一个或多个输出
- 算法设计的要求:
- 正确性:算法应满足具体问题的求解需求。
- 可读性:算法首先要便于人们理解,其次是机器可执行。
- 健壮性:要对非法输入具有抵抗能力,不会产生误动作或陷入瘫痪。
- 高效率和低容量:算法的执行时间要尽量低和算法执行的过程中需要的最大存储空间要尽量小。
3.2 时间复杂度
-
时间复杂度的概念:语句总执行次数T(n),T(n) = O(f(n))。它表示随着时间规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度。
-
当有若干个循环语句,算法的时间复杂度是由**嵌套层数最多的循环语句中最内层的语句的频度f(n)**所决定。
-
常见时间复杂度:O(1) < O(logn) < O(n) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
3.3 空间复杂度:
- 概念:计算算法所需要的存储空间,S(n) = O(f(n)),n为问题的规模,f(n)为语句关于n所占内存空间的函数
- 空间开销和时间开销可以互相转换
3.4 求时间复杂度的例题
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
y++;
//其时间复杂度取决于第三行的y++,因为y++是循环最内层的语句。
//最外层循环执行的次数是n+1
//中间层循环执行次数是n*(n+1)
//最内层循环执行次数是n*n
//因此本题时间复杂度是T(n) = O(n^2)
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
x++
//最外层循环执行次数是n+1
//中间层循环执行次数是2+3+4+……+n+1 = n(n+3)/2
//最内层循环执行次数是1+2+3+……+n = n(n+1)/2
//因此本题时间复杂度T(n) = O(n^2)
i=1;
while (i<=n)
i=i*2;
//i=i*2语句执行次数为f(n),则有2^(f(n))<=n。解得f(n) = log2(n)
//因此本题时间复杂度为log2(n)