一、算法效率
算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。二、时间复杂度
1、时间复杂度概念
算法中的基本操作的执行次数,为算法的时间复 杂度。2、大O的渐进表示法
(1)大O符号:是用于描述函数渐进行为的数学符号
(2)推导大O阶方法
- 用常数1取代运行时间中的所有加法常数
- 在修改后的运行次数函数中,只保留最高阶项。
- 如果最高阶项存在且不是 1 ,则去除与这个项目相乘的常数。得到的结果就是大 O 阶
- 最坏情况:任意输入规模的最大运行次数(上界)
- 平均情况:任意输入规模的期望运行次数
- 最好情况:任意输入规模的最小运行次数 ( 下界 )
void func1 ( int N ) { int count = 0 ; for ( int k = 0 ; k < 100 ; k ++ ) { count ++ ; } System . out . println ( count ); //此处代码执行了100次 时间复杂度为 O(1) }
void func2 ( int N , int M ) { int count = 0 ; for ( int k = 0 ; k < M ; k ++ ) { count ++ ; } for ( int k = 0 ; k < N ; k ++ ) { count ++ ; } System . out . println ( count ); /此处代码执行了M*N次 时间复杂度为 O(MN) }
三、空间复杂度
1、空间复杂度概念
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度
空间复杂度算的是变量的个数
2、举例
int [ ] fibonacci ( int n ) { long [] fibArray = new long [ n + 1 ]; fibArray [ 0 ] = 0 ; fibArray [ 1 ] = 1 ; for ( int i = 2 ; i <= n ; i ++ ) { fibArray [ i ] = fibArray [ i - 1 ] + fibArray [ i - 2 ]; } return fibArray ; // 动态开辟了 N 个空间,空间复杂度为 O(N }