时间复杂度与空间复杂度的基本概念

来源:互联网 发布:ipad程序员必备app 编辑:程序博客网 时间:2024/05/12 12:14

时间复杂度:

时间复杂度是指计算函数执行的基本次数,这里所指的函数是指数学里面的函数。

计算时间复杂度的时候一般会采用取大舍小的方法,比如时间复杂度=N^2+10,我们就会舍去10

一个函数的算法我们也分好几种情况,而我们一般都是考虑最坏的情况。

最好情况:输入的次数是函数运行的最小运行时间。

最坏情况:输入的次数是函数的最大运行时间。

平均情况:输入的次数是函数运行次数期望的运行时间。

我们举一些简单的例子:

void Test1(int N){int i = 0;int j = 0;int k = 0;for (i = 0; i < N; ++i){for (j = 0; j < N; ++j){//……}}for (k = 0; k < 2 * N; ++k){//……}int count = 10;while (count--){//……}} #include<stdio.h>int main(){Test1;return 0;}
她的时间复杂度为:O(N^2)

void Test2(int N;int M){int i = 0;int j = 0;for (i = 0; i < M; ++i){}for (j = 0; j < N; ++j){}} #include<stdio.h>int main(){Test2;return 0;}
它的时间复杂度是:O(M*N)

递归算法的时间复杂度为:递归总次数*每次递归的次数

空间复杂度:

空间复杂度的计算与空间复杂度类似,也是用O的渐进表示法。

要注意的是递归算法的空间复杂度,假如递归深度为N*每次递归的空间大小,如果每次递归的空间为常数,则空间复杂度为O(N)。

以斐波那数列学习时间复杂度与空间复杂度

他是以兔子生长数目为例子:

第一个月月初有一对刚诞生的兔子,第二个月之后(第三个月初)它们可以生育,每月每对可生育的兔子会诞生下一对新兔子,兔子永远不死去

这个函数的定义为:


它的时间复杂度是:O(2^N),它的空间复杂度是O(N).


原创粉丝点击