01.数据结构与算法
一、基本概念与术语
1.数据(Data):是对信息的一种符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
2.数据元素(Data Elemet):是数据的基本单元,在计算机程序中通常作为一个整体进行考虑和处理。
一个数据元素可由若干个数据项组成。数据项是数据的不可分割的最小单位。
3.数据对象(Data Object):是性质相同的数据元素的集合。是数据的一个子集。
4.数据结构(Data Structure):是相互之间存在一种或多种特定关系的数据元素的集合。数据结构的形式定义为:数据结构是一个二元组:Data-Structure=(D, S)
其中:D是数据元素的有限集,S是D上关系的有限集。
数据之间的相互关系称为逻辑结构。
数据的逻辑结构是独立于计算机的,对数据元素之间的逻辑关系的描述。从集合的观点,他们可以用一个二元组B=(D, R)表示,其中D是数据元素的集合, R是D上关系的集合。
按集合的观点,数据的逻辑结构有两个要素:一是数据元素;二是关系。
5.通常分为四类基本结构:
集合: 结构中的数据元素除了同属于一种类型外,别无其他关系。
线性结构: 结构中的数据元素之间存在一对一的关系。
树型结构: 结构中的数据元素之间存在一对多的关系。
图状结构或网状结构: 结构中的数据元素之间存在多对多的关系。
6.数据的逻辑结构按关系分为线性结构(关系是线性的)和非线性结构(关系是非线性的)。
7.数据的物理结构: 是指数据的逻辑结构在计算机中的映像,即存储表示。映像包括数据元素的映像和数据关系的映像。数据元素的映像是结点,即在计算机内用一结点表示一个数据元素(结点是数据结构讨论的基本单元)。关系的映像有两种,顺序映像和非顺序映像。
数据结构主要指逻辑结构和物理结构。
8.顺序存储结构与非顺序存储结构:
顺序存储结构是逻辑上相邻的数据元素存储在物理位置上相毗邻的存储单元里,元素的关系由存储单元的邻接关系来体现。
非顺序存储结构是数据元素可以在计算机内任意位置上存放(它要求逻辑上相邻的元素在物理位置上也相邻),它们的逻辑关系用指针来链接。所以非顺序存储结构又叫做链式存储结构。链式存储结构将数据元素存放的存储单元分为两个部分,分别存放数据和指针,称为数据域和指针域。
9.算法:是对特定问题求解步骤的一种描述。算法是指令的有限序列,其中每一条指令表示一个或者多个操作。
10.算法具有以下五个特性:
有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
确定性:算法中每一条指令必须有确切的含义。不存在二义性。且算法只有一个入口和一个出口。
可行性:一个算法是可行的。即算法描述的操作都是可以通过已经实现的基本算法执行有限次来实现的。
输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象集合。
输出:一个算法有一个或者多个输出,这些输出是同输入有着某些特定关系的量。
11.算法评价标准
正确性:合理的数据输入下,在有限的运行时间内得出正确的结果。
健壮性:对不合理的数据输入的反应和处理能力。
可读性:供人们阅读的方便程度。
简单性:采用数据结构和方法的简单程度。
时间复杂度(计算复杂度):算法运行时间的相对量度。
空间复杂度:算法运行中临时占用空间大小的量度。
12.时间复杂度(Tine Complexity):如果存在两个正常数c和n0,对于所有的n>=n0,有|f(n)|<=c|g(n)| ,则记作f(n)=O(g(n))
频度:是指该语句重复执行的次数
最坏时间复杂度
分析算法时,存在几种可能的考虑:
-
- 算法完成工作最少需要多少基本操作,即最优时间复杂度
- 算法完成工作最多需要多少基本操作,即最坏时间复杂度
- 算法完成工作平均需要多少基本操作,即平均时间复杂度
对于最优时间复杂度,其价值不大,因为它没有提供什么有用信息,其反映的只是最乐观最理想的情况,没有参考价值。
对于最坏时间复杂度,提供了一种保证,表明算法在此种程度的基本操作中一定能完成工作。
对于平均时间复杂度,是对算法的一个全面评价,因此它完整全面的反映了这个算法的性质。但另一方面,这种衡量并没有保证,不是每个计算都能在这个基本操作内完成。而且,对于平均情况的计算,也会因为应用算法的实例分布可能并不均匀而难以计算。
因此,我们主要关注算法的最坏情况,亦即最坏时间复杂度。
时间复杂度的几条基本计算规则
- 基本操作,即只有常数项,认为其时间复杂度为O(1)
- 顺序结构,时间复杂度按加法进行计算
- 循环结构,时间复杂度按乘法进行计算
- 分支结构,时间复杂度取最大值
- 判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略
- 在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度
常见时间复杂度
执行次数函数举例 | 阶 | 非正式术语 |
---|---|---|
12 | O(1) | 常数阶 |
2n+3 | O(n) | 线性阶 |
3n2+2n+1 | O(n2) | 平方阶 |
5log2n+20 | O(logn) | 对数阶 |
2n+3nlog2n+19 | O(nlogn) | nlogn阶 |
6n3+2n2+3n+4 | O(n3) | 立方阶 |
2n | O(2n) | 指数阶 |
13.空间复杂度(Space Complexity):算法所需存储空间的度量,记作:S(n)=O(f(n)) 其中n为问题的规模(或者大小)
算法运行中占用空间包括算法本身占用,输入输出数据占用和运行中的临时占用。
同一个问题,算法不同,运行的临时空间不同,即空间复杂度不同。
只考虑在运行中为局部变量分配的存储空间大小,一般也以数量级表示。
---恢复内容结束---