什么是算法
算法: 使用一段程序解决实际问题的方法
怎么评估算法的性能
时间复杂度分析方法
- 不依赖具体的执行环境
- 不用具体的测试数据
- 在算法实现前,我们在脑海就可以评估算法的性能
什么是评估一个算法的性能 : 本质上就是评估这个算法代码执行的时间
什么是时间复杂度分析
大O复杂度表示法
T(n)=O(f(n))
f(n) 中省略系数 低阶 和常量
- T(n) 就是表示算法程序段执行的时间
- n 表示的是算法输入数据规模的大小
- f(n) 表示程序段所有语句执行的次数综合
- 大 O 表示程序段执行时间T(n)与f(n)函数的关系
常量阶时间复杂度
只要你的程序段执行的时间和输入数据规模n没有关系的话,即使需要执行成千上万行的代码,那么你的程序时间复杂度仍然是 O(1)
对数阶时间复杂度
O(log2n)=O(log3n)=...=O(logmn)所以对数阶时间复杂度:O(logn)
时间复杂度分析法则
加法法则
T(n)=max(T1(n),T2(n))
T(n)=O(m)+O(n)=O(m+n)
乘法法则
T(n)=T1(n)∗T2(n)=O(f(n)∗g(n)
eg: 给你一个整数类型数组,判断这个数组是否存在某个整数
int [] arr = {7,3,3,4,5,9,5};
int target = 4;
for(int i = 0; i < arr.length; i++){
....
}
常用的时间复杂度
- 常数阶 O(1)
- 对数阶 O(logn)
- 线性阶 O(n)
- 线性对数阶 O(nlogn)
- 平方阶 O(n2)
- 立方阶 O(n3)
- .....
- k次方阶 O(nk)
- 指数阶 O(2n)
- 阶乘阶 O(n!)
O(1)<O(logn)<O(n)<O(n2)<O(2n)<O(n!)