一、概述
1、数据结构分类
逻辑结构
- 集合结构
- 线性结构
- 树形结构
- 图形结构
物理结构
逻辑结构真正在计算机中表达方式
- 顺序存储结构:数组(数据存储单元内存地址是连续的)
- 链式存储结构:引入指针存放数据元素的地址
2、算法
根据一定的条件,对一些数据进行计算,得出需要的结果。
优秀的算法追求的目标
- 花最少的时间完成需求
- 占用最少的内存空间完成需求
2.1算法分析
事前分析估算法
- 算法采用的策略和方案
- 编译产生的代码质量
- 问题输入估摸
- 机器执行指令的速度
2.1.1时间复杂度分析
分析算法的运行时间,最重要的就是把核心操作的次数和输入规模关联起来
2.1.1.1函数的渐进增长
随着输入规模(n)的增大,算法的常数操作可以忽略不计。
随着输入规模(n)的增大,与最高次项相乘的常数可以忽略。
最高次项的指数大的,随着n的增长,结果也会变得增长特别快。
算法函数中n最高次幂越小,算法的效率越高。
总结:
- 算法函数中的常数可以忽略。
- 算法函数中最高次幂的常数因子可以忽略
- 算法函数中最高次幂越小,算法的效率越高
2.1.1.2算法时间复杂度
大O记法规则使用
- 用常数1取代运行时间中的所有加法常数
- 在修改后的运行次数中,只保留高阶项
- 如果最高阶项存在,且常数因子不为1,则去除与这个项相乘的常数
时间复杂度从低到高:O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)
2.1.1.3函数调用中的时间复杂度分析
每一段核心代码执行的都要计算,然后通过大O记法进行规整
2.1.1.4最坏情况
2.1.2空间复杂度分析
遵循大O记法,在java后端开发中,默认遵循时间复杂度分析