时间与空间复杂度

【时间复杂度】
其实只是一个度量,不是真正的运行时间的投影,真的的运行时间必须上机运行测试才能知道。也就是说只是给了你一个尺子去量一下这个算法的耗时,不是这个算法实现以后真的会耗时多少,也不是两个不同的算法的耗时比例真的可以这么比。时间复杂度的定义是以一个算法基本操作(一般就是循环体)重复执行的次数来作为度量单位。先找出算法的基本操作,然后根据相应的各语句确定它的执行次数。
一般情况下,算法的基本操作重复执行的次数是模块n的某一个函数f(n),因此,算法的时间复杂度记做:T(n)=O(f(n))。随着模块n的增大,算法执行的时间的增长率和f(n)的增长率成正比,所以f(n)越小,算法的时间复杂度越低,算法的效率越高

首先,我们来看外循环

for(i=0;i<n;i++)
{
....//代码
}

按照i++的递加速度,直到这个循环退出,一共是n次


再来看看内部循环

for(j=1;j<n;j*=2)
{
...//代码
}

这个内部循环的累加速度是j=j*2,假设循环x次之后,这个循环退出
2x >n ==> x> log2n


具体例子:

1、O(1)

  int x = 1;  

2、O(n)

    for(int i=0; i<n; i++) {  
        cout<<i;  
    }  

3、O( log2n )

    for(int i=1;i<=n;i*=2) {  
        count++;  
    }  

4、O( n2 )

    for(int i=1; i<=n; i++) {  
        for(int j=1; j<=n; j++) {  
            count++;  
        }  
    }  

5、O(n log2n )

    for(int i=1; i<=n; i *= 2) {  
        for(int j=1; j<=n; j++) {  
            count++;  
        }  
    } 

[两条规则]
加取大:
T(n)= T1 (n)+ T2(n) =O(f(n))+O(g(n))=O(max(f(n),g(n)))
积相乘:
T(n)= T1 (n)* T2(n) =O(f(n))*O(g(n))=O( (f(n)*g(n)) )
注:时间复杂度是总运算次数表达式中受n的变化影响最大的那一项(不含系数)
f(n)=a* n3 +b* n2 +c*n 则其时间复杂度为O( n3 )


【空间复杂度】
一个程序执行时除了需要存储空间和存储本身所使用的指令、常数、变量和输入数据外,还需要一些对数据进行操作(一般是指进行删除,排序需要的额外存储空间,可以简单的理解为临时变量占用的存储空间)的工作单元和存储一些为现实计算所需信息的辅助空间。

    int x=1, y=2;  
    int temp = x;  
    x = y;  
    y = temp;  
    //一个临时变量temp,所以空间复杂度为O(1)。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Casionx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值