算法的时间复杂度与空间复杂度

一、算法效率的度量有两种方法

  1. 事后统计法

    (1) 描述
    比较不同算法对同一组输入数据的运行处理时间

    (2) 缺陷
    a. 为了获得不同算法的运行时间必须编写相应程序
    b. 运行时间严重依赖硬件以及运行时的环境因素
    c. 算法的测试数据的选取相当困难
  2. 事前统计法

    (1) 描述
    依据统计的方法对算法效率进行估算

    (2) 影响算法效率的主要因素
    a. 算法采用的策略和方法
    b. 问题的输入规模
    c. 编译器所产生的代码
    d. 计算机执行速度
  3. 总结
    事后统计法虽然直观,但是实施困难且缺陷多,一般不予考虑

二、大O表示法

  1. 描述
    a. 算法效率严重依赖于操作( Operation)数量
    b. 在判断时首先关注操作数量的最高次项
    c. 操作数量的估算可以作为时间复杂度的估算
  2. 举例说明

    O(5)=O(1)

    O(2n+1)=0(2n)=O(n)

    O(n2+n+1)=O(n2)

    O(3n3+1)=O(3n3)=O(n3)

  3. 直观数据比较

  4. 关系

三、时间复杂度与空间复杂度

☆算法:计算1+2+3+...+n

  1. 方式一
    long sum1(int n)
    {
        long ret = 0; //4 byte
        int* array = (int*)malloc(n * sizeof(int)); //4 + 4 * n byte
        int i = 0; //4 byte
        //总共占用了12 + 4 * n byte
        
        for(i=0; i<n; i++)
        {
            array[i] = i + 1;
        }
        
        for(i=0; i<n; i++)
        {
            ret += array[i];
        }
        
        free(array);
        
        return ret;
    }

    时间复杂度:O(2n + 5) = O(n)
    空间复杂度:O(4n + 12) = O(n)

  2. 方式二
    long sum2(int n)
    {
        long ret = 0; //4 byte
        int i = 0; //4 byte
        //总共占用了8 byte
        
        for(i=1; i<=n; i++)
        {
            ret += i;
        }
        
        return ret;
    }

    时间复杂度:O(n + 3) = O(n)
    空间复杂度:O(8) = O(1)

  3. 方式三
    long sum3(int n)
    {
        long ret = 0;//4 byte
        //总共占用了4 byte    
        
        if( n > 0 )
        {
            ret = (1 + n) * n / 2;
        }
        
        return ret;
    }

    时间复杂度:O(3) = O(1)
    空间复杂度:O(4) = O(1)

四、分析

高性价比的程序应遵循两点:一是用尽量少的内存空间解决问题;二是用尽量少的步骤解决问题。方式一的做法比较直观,但先申请数组空间,初始化数组再遍历数组求和的方法,再对相对于方式二显得复杂臃肿;方式二没有使用堆空间,所以比方式一好;方式三相对于方式二更好,因为一步到位,没有遍历循环操作。其中方式一与方式二的执行效率会受n的规模影响,而方式三的执行效率无论n规模多大都是固定的。
 

    


 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值