衡量一个算法:复杂度:时间复杂度+空间复杂度
算法效率分析:第一种时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称为空间复杂度。时间复杂度主要衡量一个算法的运行速度,而空间复杂度主要衡量一个算法需要的额外空间。
时间复杂度
函数中某条语句相对于问题规模N(参数、输入)的数学表达式;
- 时间复杂度关注的是最差的情况;
- 时间复杂度没有参考算法运行时间的长短,而是使用基本语句的运行次数
一般情况:
代码中有一个循环----->O(N)—查找元素
代码中有两个嵌套的循环---->O(N^2)—冒泡排序
具体以算法为准
有些算法中:
1.二分查找:O(logN)
2.递归:递归的总次数*每次递归的基本语句运行次数
算法的时间复杂度存在如下几种情况:
- 最坏情况:任意输入规模的最大运行次数(上界)
- 平均情况:任意输入规模的期望运行次数
- 最好情况:任意输入规模的最小运行次数(下界)
例如:在一个长度为N的数组中查找数据X
最好情况:1次找到
最差情况:N次找到
平均状况:N/2次找到
大O渐进表示法
- F(N)是一个常数O(1);
- F(N)由多个子项组成,只取最高项;
- 若最高阶项的系数是不是1,将其改为1;
- 时间复杂度:计算的是最优平均速率、最差的情况;
常见的时间复杂度计算举例
- 分析以下程序的时间复杂度( )
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
a[i][j]=i*j;
A、O(n)
B、(n^2)
C、O(nlogn)
D、O(logn)
- 分析以下函数的时间复杂度( )
void fun(int n) {
int i=l;
while(i<=n)
i=i*2;
}
A、O(n)
B、O(n^2)
C、O(nlog2n)
D、O(log2n)