数据结构与算法
一、数据结构
1.1、数据结构
(1)、逻辑
逻辑结构: 按照逻辑关系组织起来的一批数据,包括线性结构和非线性结构。
- 线性结构:线性表
- 非线性结构:树和图
NOTE:图≧树≧二叉树≧线性表
(2)、存储
存储结构: 按照一定的存储方法,把它存储在计算机中,即逻辑结构到物理存储空间的映射,分为四类:顺序、链接、索引、散列
(3)、运算
运算:在这些数据上定义了一个运算的集合
1.2、抽象数据类型(ADT)
抽象数据类型(只关心逻辑和运算,不关心存储细节):定义了一组运算的数学模型与物理存储结构无关使软件系统建立在数据之上
1.3、模块化思想
模块化思想:隐藏运算实现的细节和内部数据结构,实现软件复用
二、算法
1.1、算法特性
- 通用性:对参数化输入进行问题求解,保证计算结果的正确性,参数化意思是算法对同类问题有效。
- 有效性:算法是由线条指令组成的指令序列(线条指令必须有意义)。
- 确定性:算法描述中的下一步应执行的步骤必须明确,即通过当前输入的数据或当前结果得到下一步处理。
- 有穷性:算法的执行必须在有限步内结束,即算法不能含有死循环。
NOTE:操作系统不满足算法有穷性,所以操作系统不是算法
1.2、算法分类
- 穷举法
- 回溯、搜索
- 递归分治
- 贪心法
- 动态规划
NOTE:这些算法将会在以后详细学习
1.3、算法复杂性
算法渐进分析:
- 渐进上限(大O表示法): 存在c,n0,当n≥n0时,都有f(n)≤c
*
g(n),则g(n)是f(n)的上界,即c=1时的c*g(n)是f(n)的上界,表示为f(n)=O(g(n)),
NOTE: 一般只找最小的g(n)
(
加法规则:f1(n)+f2(n)=O(max(f1(n),f2(n))),即只考虑最耗时的,如顺序结构,if结构,switch结构。
乘法规则: f1(n)*f2(n)=O(f1(n)*f2(n)),即套嵌语句(一般是循环)情况下满足乘法规则,如for,while,do-while
)
- 渐进下限(大Ω表示法):存在c,n0,当n≥n0时,都有f(n)≥c
*
g(n),则g(n)是f(n)的下界,即c=1时的c*g(n)是f(n)的下界,表示为f(n)=Ω(g(n)),
NOTE: 一般只找最大的g(n)
- 紧渐近限:存在c1,c2,n0,当n≥n0时,都有c1g(n)≤f(n)≤c2g(n),则g(n)是f(n)的近界,即c=1时的c*g(n)是f(n)的近界,
NOTE:g(n)与f(n)同阶
注: 求时间复杂度一般是目标元素所在位置的概率*
检索到该位置的时间复杂度