算法时间复杂度

算法时间复杂度可以认为就是代码需要循环的次数O(n)

例题
1.下面算法的时间复杂度是多少

for(int i=1;i<n;i=i*2){
  System.out.print(""+i);
}

我们可以从循环结束的条件开始入手
很明显是当i=n(或者i>n)时,这时候我们假设x次循环后达到条件,即i*2^x=n,
转换一下:2^x=n/i,
由于i的初始值是1,所以这里只要算出2^x=n中的表达式就是算法的时间复杂度,那就是
x=log(n)

2.下面算法的时间复杂度是多少

for(int i=1;i<Math.pow(2,n);i++){
  System.out.print(""+i);
}

Math.pow(int x ,int y);//输出x的y次幂也就是x^y
这里循环的终止条件就是i=2^n,所以,代码循环次数就是2^n,即算法的时间复杂度为O(2^n)

3.下面算法的时间复杂度是多少

for(int i=1;i<factorial(n);i++){
  System.out.print(""+i);
}

factorial(n)返回n的阶乘,所以终止条件就是i=n!,算法复杂度为O(n!)

4.递归算法时间复杂度
斐波那契数列1,1,2,3,5,8,13,21...
函数:f(n)=f(n-1)+f(n-2);
代码:

public int fun(int n){
  if(n==0||n==1){
    return n;
  }
  return fun(n-1)+fun(n-2);
}

暴力假设,第一次计算2次,第二次执行4次,第三次执行8次...第n次执行2^n次,所以总的计算次数是等比数列的前n项和的次数,数据公式Sn=(1-q^n)/(1-q),q为公比。所以,取最高次该归算法时间复杂度为O(q^n),这里q为2.即算法复杂度O(2^n)。
P·S:当高阶与低阶混合的时候,只取高阶的复杂度

常见类型算法时间复杂度:
image.png

证明过程相当复杂,我也不清楚,有兴趣的同学可以去研究一下,我们应付面试只知道结果就好了
1.二叉树查找O(log n)
2.二叉遍历O(n)
3.排序的查找或者二维矩阵的查找O(n)
4.快排,归并排等O(n·log n)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容