一、数据结构
1. 逻辑结构的表示(K,R)
K:结点集合 R:关系集合(讨论的重点)
R的分类
·线性结构:全序性(可比较前后),单索性(唯一的前驱,唯一的后继)
·树型结构:唯一的前驱,多个后继
·图结构:多个前驱,多个后继
2. 存储结构
空间相邻(基本单位 字节)
随机访问(按地址)
存储映射方法
·顺序:特点紧凑,不浪费空间。如数组(适合“读”,增删少的情形)
·链接:利用指针,在内存中不连续。增删容易,定位困难。如链表
·索引:把结点的整数索引值映射到存储地址(顺序存储的推广)
·散列:我们希望找到一个散列函数,使得尽量不发生哈希冲突(索引的推广)
哈希表
①线性探测表:将冲突的数据往后放
②哈希桶:将冲突的数据放在同一个位置下,用单链表管理
负载因子:数据个数/空间数;一般来说,当负载因子达到0.7就要进行扩容
抽象数据类型(ADT,Abstract Data Type)
抽象数据类型由 <数据对象,数据关系,数据操作>三个不可分割的部分组成的三元组:
ADT抽象数据类型名{
数据对象D: <数据对象的定义>
数据关系S: <数据关系的定义>
数据操作P: <基本操作的定义>
}ADT抽象数据类型名
二、算法
1. 分类
穷举,回溯搜索,动态规划,递归分治,贪心
2. 复杂性
不能用绝对的时间单位(如微妙、纳秒)来度量,而考虑用输入数据规模N及其所需基本操作B的数来度量。
与编程语言,机器等因素相关,如C语言比Pathon快
P类问题(P:polynominal,多项式):存在多项式时间算法的问题。
NP类问题(NP:Nondeterministic polynominal,非确定性多项式):能在多项式时间内验证得出一个正确解的问题。
P类问题是NP问题的子集,因为存在多项式时间解法的问题,总能在多项式时间内验证他。
NPC类问题(Nondeterminism Polynomial complete):存在这样一个NP问题,所有的NP问题都可以约化成它。只要解决了这个问题,那么所有的NP问题都解决了。
渐进算法分析(asymptotic algorithm analysis):只考虑增长速度很快的部分,忽略不能显著改变函数量级的部分
i.大O表示法
若存在正数c和n0,使得n>n0时,f(x)<=cg(x),则称f(x)是O(g(x))的。注意,我们寻找的g(x)应该是所有上限中最小的一个。
特别地,O(1)表示算法的复杂性是常数时间,即与输入数据无关。例如哈希表中没有发生哈希冲突的情况。
ii.Ω表示法
若存在正数c和n0,使得n>n0时,f(x)>=cg(x),则称f(x)是Ω(g(x))的。注意,我们寻找的g(x)应该是所有下限中最大的一个。
大O表示法与Ω表示法的区别在于不等号的方向不同。
iii.Θ表示法
若存在正数c1,c2以及n0,使得n>n0时,c1g(n)<=f(n)<=c2g(n),则称f(n)是Θ(g(n))的。这是大O表示法的上限与Ω表示法的下限相同的情况。