空间时间复杂度

算法效率包括时间上的效率(时间复杂度)和空间上的效率(空间复杂度)两个部分

时间复杂度:用来衡量一个算法的运行速度,即,算法中的基本操作的执行次数。

空间复杂度:算法在运行过程中临时占用存储空间大小的衡量。

注:在实际中一般情况关注的是算法的最坏运行情况。

下面举两个最典型的例子作为说明:

#include <stdio.h>
 long long Factorial (size_t k)
 {
  return k<2 ? 1 : Factorial(k-1)*k;
 }
int main ( )
{
  printf ("%d\n",Factorrial(6));
  return 0;
}

在递归调用求k的阶乘时,由于总共递归调用了k次,开辟了k个栈帧,而且每个栈帧使用了常数个间,所
以时间复杂度为O(N),空间复杂度为O(N)。
1
2
3
4
5
6
7
8
9
10
11
12


#include <stdio.h>
long long Fibonacci (size_t k)
{
 return k<2 ? k : Fibonacci (k-1) + Fibonacci (k-2);
}
int main ( )
{
 printf ("%d ",Fibonacci(10));
 return 0;
}

在求斐波那契函数时,可以把每次对fibonacci(k)的调用整体上看做是一个二叉树,由于二叉树的结点最多
有(2^n - 1)个,即遍历完所有的结点的个数为(2^n - 1)。
所以,时间复杂度为O(2^n),空间复杂度为O(N)。

猜你喜欢

转载自blog.csdn.net/lucky52529/article/details/84632771