第一章 绪论
学习导图
- 基本概念和术语
- 数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合
(数据结构,直白地理解,就是研究数据的存储方式。) - 数据(data)—所有能输入到计算机中去的描述客观事物的符号
- 数据元素(data element)—数据的基本单位,也称节点(node)或记录(record)
- 数据项(data item)—有独立含义的数据的不可分割的最小单位,一个数据元素可由若干个数据项组成。
- 数据结构(data structure)—数据元素和数据元素关系的集合
- 数据按逻辑关系可归结为四类:
- 集合结构
- 线性结构
- 树形结构
- 图状结构或网状结构
数据的逻辑结构有两个要素:数据元素和关系。
数据的逻辑结构 — 抽象反映数据元素的逻辑关系
数据的存储(物理)结构 — 数据结构在计算机中的表示;是数据的逻辑结构在计算机中的映象,包括数据元素的映象和关系的映象.
数据元素的映象是结点,一个结点表示一个数据元素(在计算机中由若干比特位组合起来形成的一个位串来表示)
关系的映象有两种,顺序映象和非顺序映象.由此得出两种不同的存储结构:顺序存储结构和链式存储结构。
- 存储结构分为:
- 顺序存储方法:它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。由此得到的存储表示称为顺序存储结构。
- 链接存储方法:它不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。由此得到的存储表示称为链式存储结构。
- 索引存储方法:除建立存储结点信息外,还建立附加的索引表来标识结点的地址。
- 散列存储方法:就是根据结点的关键字直接计算出该结点的存储地址。
- 算法
算法(algorithm): 解决某一特定问题的具体步骤的描述,是指令的有限序列。
- 有穷性 一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
- 确定性 算法中每一条指令必须有确切的含义。不存在二义性。且算法只有一个入口和一个出口。
- 可行性 一个算法是可行的。即算法描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。
- 输入 一个算法有零个或多个输入,这些输入取自于某个特定的对象集合。
- 输出 一个算法有一个或多个输出,这些输出是同输入有着某些特定关系的量。
算法和程序的不同
算法与程序的含义十分相似,但不相同:一个程序不一定满足有穷性,可以死循环;程序中的指令必须是机器可执行的,而算法中的指令则无此限制。
算法设计的要求 - 正确性(Correctness) 算法应满足具体问题的需求。
- 可读性(Readability) 算法应该好读。
- 健状性(Robustness) 算法应具有容错处理。
- 效率与低存储量需求
算法效率的度量
算法效率:用依据该算法编制的程序在计算机上运行所消耗的时间来度量。
-
事后统计:利用计算机内记时功能,不同算法的程序
可以用一组或多组相同的统计数据区分。
缺点:
①必须先运行依据算法编制的程序;
②所得时间统计量依赖于硬件、软件等环境因素,掩盖算法本身的优劣。同一个算法用不同的语言、不同的编译程序、在不同的计算机上运行,效率均不同。所以使用绝对时间单位衡量算法效率不合适。
- 事前分析估算
时间复杂度:一般情况下,算法中基本操作重复执行的次数是问题规模 n 的某个函数,算法的时间量度记作
T(n) = O(f(n))
称作算法的渐近时间复杂度,简称时间复杂度。
频度:是指该语句重复执行的次数。
常用的六种多项式的时间复杂度关系为:
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)
- 事前分析估算
空间复杂度:
算法所需存储空间的度量,记作:
S(n)=O(g(n))
其中n为问题的规模(或大小) : 表示随着问题规模 n 的增大,算法运行所需存储量的增长率与 g(n) 的增长率相同。
算法的空间性能以一个算法运行过程中临时占用的存储空间作为度量标准——算法空间复杂度