算法时间复杂度

2019-09-27  本文已影响0人  JohnsonZzzz

算法时间复杂度可以认为就是代码需要循环的次数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)

上一篇 下一篇

猜你喜欢

热点阅读