算法效率包括时间上的效率(时间复杂度)和空间上的效率(空间复杂度)两个部分
时间复杂度:用来衡量一个算法的运行速度,即,算法中的基本操作的执行次数。
空间复杂度:算法在运行过程中临时占用存储空间大小的衡量。
注:在实际中一般情况关注的是算法的最坏运行情况。
下面举两个最典型的例子作为说明:
#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)。