计算时间复杂度&空间复杂度

1.下面函数的复杂度是:

long foo(long x){
    if(x<2) return 1;
        return x*x*foo(x-1);
}

解析:

当n>=2时
foo(n)=n^2*foo(n-1)=n^2*(n-1)^2*foo(n-2)=...=n^2*(n-1)^2*...*2*foo(1);
递归n-1步,时间复杂度为O(n)。
 
2.对于移动平均算法,是计算某变量之前n个数值的算术平均,正确的说法是:A

  A.空间复杂度是O(1)

  B.空间复杂度是O(n)

  C.空间复杂度是O(logn)

  D.空间复杂度是O(nlogn)

解释:

  注意算的是空间复杂度

  任何一个算法不同情况下可能有多种解法,一般我们以时间复杂度为评判的话,就会用牺牲空间换时间。
  这个算法最明显的有两种解法,
  1.每次进来一个变量n,就遍历前面n个数,然后求和,再取平均,这样的话时间复杂度为O(n),空间为O(1);
  2.以空间换时间:从前往后没计算一次保留一次求和值到一个辅助空间,这样计算下一个的时候直接取得前一个和值加上当前数,再取平均得到当前平均,这样的话时间复杂度为O(1),空间为O(n) 

 

posted @ 2016-08-31 21:38  GumpYan  阅读(799)  评论(0编辑  收藏  举报