【数据结构实战C++】4 算法复杂度概念

【数据结构实战C++】4 算法复杂度概念

作者 CodeAllen ,转载请注明出处


效率是工程中最关注的算法特性

算法效率的量度的几个方法

事后统计法
-比较不同算法对同一组输入数据的运行处理时间
-缺陷

  • 为了获得不同算法的运行时间必须编写相应程序
  • 运行时间严重依赖硬件以及运行时的环境因素
  • 算法的测试数据的选取很困难

事前分析估算
-依据统计的方法对算法效率进行估计
-影响算法效率的主要因素

  • 1,算法采用的策略和方法
  • 2,问题的输入规模
  • 3,编译器所产生的代码
  • 4,计算机的执行速度

算法效率的简单估计一
在这里插入图片描述

算法效率的简单估计二
在这里插入图片描述
算法效率的简单估计三
在这里插入图片描述
程序效率估算

#include <iostream>

using namespace std;

int func(int a[], int len)       // ==> (n*n + 2)
{
    int ret = 0;      // 1
    
    for(int i=0; i<len; i++)     
    {
        for(int j=0; j<len; j++)
        {
            ret += a[i] * a[j];  // n * n
        }
    }
    
    return ret;                  // 1
}


int main()
{
    int array[] = {1, 2, 3, 4, 5};
    
    cout << func(array, 5) << endl;
    
    return 0;
}

上述程序关键部分的操作数量是n*n
三种求和算法中关键部分操作数量分别是2n, n ,1

不同算法操作数量的对比
在这里插入图片描述

算法操作数量对比一

在这里插入图片描述

算法操作数量对比二
在这里插入图片描述

算法操作数量对比三
在这里插入图片描述

小结
算法度量方法有 事后统计法和事前分析估算法
事后统计法不容易准确度量算法的效率
事前分析估算法通过操作数量度量算法效率
判断一个算法效率时只关注最高阶项就能得到结论

算法随着问题规模n的增大,会越来越优越于另一个算法,或者越来越差于另一个算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CodeAllen嵌入式

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

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

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

打赏作者

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

抵扣说明:

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

余额充值