数据结构中的基本概念
数据
数据结构中的组成:
数据项(eg:student.age/name)->数据元素(eg:student Kevin)->数据对象(eg:student)
数据的四种逻辑结构:
- 集合结构
- 线性结构(一对一的关系)
- 树形结构(一对多的关系)
- 图形结构(多对多的关系)
数据的两种物理结构:
- 顺序结构(存放在连续的存储单元里)
- 链式结构(存储在任意单元or通过保存地址找到相关联的数据元素)
算法
高效的程序需要:
- 恰当的数据结构
- 合适的算法
算法的特型:
- 输入:0个或者多个
- 输出:至少1个或多个
- 有穷性:在可以接受的有限步骤之后结束,不会进入无限循环
- 确定性:每一步含义明确,没有二义性
- 可行性:
算法的指标:
1. 正确性(最重要的基本准则)
- 合法数据->满意结果
- 非法输入->合理结果
- 边界数据&压力数据->满足要求的结果
2. 健壮性
减少无法预测的结果的产生
3. 性价比
- 时间成本
- 资源消耗
4. 可读性
- 代码易读
- 注释清晰
影响算法效率的主要因素:
- 算法采用的策略和方法
- 问题的输入规模
- 编译器的编译策略
- 硬件(不同CPU,GPU,FPGA,ASIC)
算法复杂度:
- 时间复杂度(数据结构主要研究)
- 空间复杂度
复杂度计算方法:大O表示法
注:没有特殊说明,复杂度均以最坏的情况为准
常见时间复杂度的比较:
理想的算法复杂度:O(1) < O(logn) < O(n*logn) < O(n^2)
勉强能够接受的算法复杂度:O(n^3)
一定避免的复杂度(即使n很小,实际运行的时间依旧不可接受):O(2^n) < O(n!) < O(n^n)