目录
衡量算法的好与坏
平常所说的复杂度都是算法最坏情况下的
大O的渐进表示法:
1 用1代替加法常数
2 运行次数不断扩大后,只保留阶数最高项
3 将最高阶项的系数改为1
时间复杂度计算:
算法的与运行时间和语句执行次数成正相关;
主要关注函数中循环的次数
例子:1
第一个循环运行了 n^2,第二个循环运行了 2n 第三个循环运行了 10,sum=n^2 + 2n + 10; 经过处理后这个函数的时间复杂度为O(n^2)
2
时间复杂度为O(n)
3
时间复杂度:O(M+N)
4
复杂度:O(1);因为可以看出这个循环共进行了100次,加法常数要变为1,所以为O(1)
5
这个冒泡排序,第一次执行了n-1次,第二次执行了n-2次,第三次执行力n-3次,直到执行1次,是个等差数列求和,最终结果为:O(n^2);
等差前n项和公式:
或者首项加尾项乘以项数除以二;
6
二分查找,当有4个数的时候需要进行两次循环,8个数需要进行三次循环,16个数需要进行四次循环,即假设需要循环次数为x,我们可以发现等量关系,个数除以2^x等于1,解出x,为log以2为底n为指。(n是指数据个数)
7
O(N);
8
类似这样:
我们认为N=5的时候有五层,那么循环次数就是2^0+2^1+....+2^(n-1);(最后一层不满2^(n-1))粗略就算即可,这个是个等比数列,最终结果为:2^n
等比数列求和公式:
空间复杂度:
主要计算原数组申请变量空间的个数,其他的局部变量均为常数可以看作1
例子1:
一直在对原数组进行操作所以空间复杂度为O(1)
2
动态开辟了n+1个空间,所以空间复杂度为O(n)
3
每次递归都要在栈上开辟空间,因此递归的空间复杂度还取决于递归的次数,这题空间复杂度为O(n)