1.什么是数据结构?
数据结构就是把数据元素按照一定的关系组织起来的集合,用来组织和存储数据。
1.2.数据结构的分类:
逻辑结构 和物理结构
逻辑结构:
集合结构(无关系)、线性结构(一对一)、树形结构(一对多)、图形结构(多对多)
物理结构:
顺序存储结构(不方便插入)、链式结构(不方便查找)(指针)
1.3.什么是算法?
根据一定的条件,对数据进行计算,得到需要的结果。(用(最佳的)数学模型解决问题)
举例:云南到北京的出行方式。在北京买房的购买方式
1.4算法的初步体验
优秀的算法:
最少的时间,占用最少的内存
举例:
计算1-100求和。for循环累加 VS 高斯公式
计算10的阶乘。暴力算法 VS 递归
2.算法分析
2.1.算法的时间复杂度分析(分析计算时间)
事后分析方法:
使用测试程序计算执行时间
有弊端:干扰执行时间,运行环境不同
事前分析法(未来要用的方法):
1)算法采用的策略和方法(程序员可以干预)
2)编译产生的代码质量(由编译器决定)
3)问题的输出规模(取决于实际需求)
4)机器执行指令的速度(不能干预)
2.1.2函数渐进增长(比较算法的相对增长率,相对增长率越小,算法的效率越高)
规律:
随着输入规模的增大,算法的常数操作可以忽略不计
随着输入规模的增大,与最高次项相乘的乘数可以忽略不计
最高次数项的指数大的,随着n的增长,结果也会增长得特别快
算法中n的最高次幂越小,算法效率越高
2.1.3大O计法
前提:程序的执行次数=程序的执行时间
T(O)=O(f(n))
表示
3次……O(1)
n+3次 O(n)
n^2+2 O(n^2)
表示方法:
用常数1取代运行时间中的所有加法常数
在修改后的的运行次数中,只保留高阶乘
如果最高阶乘存在,且常数因子不为1,则去除这个项相乘的常数
2.1.3.1常见的大0阶
1)线性阶
一般含有非嵌套循环(一个for循环执行n次)
2)平方阶
双层嵌套循环(例如两个个for循环每个都执行n次)
3)立方阶
三层嵌套循环
4)对数阶
范围内乘法累加计算循环,计算循环次数则需要用log计算
规律:可以忽略底数
5)常数阶
复杂度:
O(1)<O(logn)<O(nlogn)<O(n^2)<O(n^3)............
2.1.4函数调用的时间复杂度分析
具体情况具体分析,灵活运用
2.1.5 最坏情况(最好,最坏,平均)
2.2空间复杂度分析(嵌入式开发)Java默认是考虑时间复杂度
1)Java的数据类型占用内存情况
byte ,1
short,2
int,4
long,8
float,4
double,8
boolean,1
char,2
2)计算机访问内存都是一次一字节
3)一个引用需要8个字节
4)创建对象16个字节
5)不够8字节,都会自动填充为8字节
6)数组,保存数组长度,不够8的倍数,填充8字节
2.2.案例 数组返转,反会数组
标签:Java,字节,复杂度,day1,算法,2.1,数据结构,常数 From: https://www.cnblogs.com/zhuxuanlv/p/16988971.html