【算法的评价】【时间限制】【内存限制】【实现难度】【时间复杂度】【空间复杂度】

目录

一、计算机的资源角度评价算法

1.时间限制

2.内存限制

3.实现难度

二、评价算法常用的两种函数

1.时间复杂度

2.空间复杂度


一、计算机的资源角度评价算法

1.时间限制:

(1)CPU的运算速度是有限制的:

例如:CPU的主频(CPU每秒钟产生脉冲信号的次数/每秒钟的时钟周期个数)从某方面角度可以衡量计算机运算速度的快慢,但其与运算速度不是简单的线性关系

以2.1GHz为例,一秒钟该CPU可以产生2.1*10^{9}次脉冲信号,如果一台计算机每个时钟周期可以完成1条指令,那么该计算机1s之内就可以运行2.1*10^{9}条指令。

(2)等待问题结果的时间也是有限的 ,需要具有时效性

有关于CPU的科普,可参考

什么是CPU的主频 - 百度文库 (baidu.com)https://wenku.baidu.com/view/37b451708e9951e79b8927c8.html

2.内存限制:

        计算机内存的大小是有限制的,计算机在运行程序的时候,单个变量、数组甚至算法运行过程中,函数互相调用时所记录的调用栈信息,都是在内存上存储的。而计算机的内存不可能无限大,内存的大小限制了我们所开变量的大小。

常用数据类型占用内存大小 - G的博客 (gnsoft.ltd)https://www.gnsoft.ltd/archives/%E5%B8%B8%E7%94%A8%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E5%8D%A0%E7%94%A8%E5%86%85%E5%AD%98%E5%A4%A7%E5%B0%8F

3.实现难度:

        算法的实现难度就是该算法是否很容易的用编程语言准确表达,实现难度是一个很实际的评价因素。

        例如:当B'算法比B的算法难度高很多,但是时间上的缩减相比于难度的提升的比率要少,此时我们不倾向于将B算法更换为B'算法。

特殊场景下算法的衡量指标

  • 近似算法中的近似比

    在解决最优化问题的近似算法中,有一个“近似比”的评价指标。

    很多最优化问题(即找到某种场景下最有利的解决方案),找到精确最优解的算法可能要运行很长时间,或者根本不可能在可接受时间内运行完毕。但是如果不要求一定是严格的最优解决方案的话,我们可以设计一些近似算法在很少的时间内给出一个“比较优”的方案。所以,该近似算法给出的解,和严格最优解之间的差别,也就是近似比,就成了衡量近似算法的一个非常重要的指标。

  • 机器学习模型算法的评估指标:

    机器学习算法可以利用已有数据集作为输入,得到一个模型,从而实现一些分类预测等任务。而为了评价所得模型的好坏,机器学习领域提出了一些评估指标,比如准确率,精确率,召回率等。


二、评价算法常用的两种函数

1.时间复杂度:

        定义:算法运行的时间和输入规模的关系。

        算法运行时间:每条语句的运行都要消耗一定时间,程序的运行时间与语句的数量有关。

        输入规模:通常情况下,输入规模越大,语句的条数越多。

        则可以看出:算法的运行时间是关于输入规模的一个函数,称为算法的时间复杂度。

        T(n):n表示输入规模,T(n)表示算法的运行时间。

        值得注意的是,算法的运行时间有时候不只输入规模有关,也与具体的询问内容有关。所以我们经常采用的一个评价指标就是“最坏时间复杂度”。

        最坏时间复杂度:规模为n的所有可能输入中,最坏情况下算法的运行时间。

        算法的运行时间可以用算法运行的语句数量近似表示,然而代码的运行时间同时受语句种运行环境的影响:

(1)即便对于一条效果相同的语句,不同的实现方式运行的时间也不一样。

(2) 即便是同一段代码,用不同的编译器编译成可执行程序,放在不同架构的处理器下运行,其运行时间也都是不一样的。

(1)详情可参考

c - Is it better to avoid using the mod operator when possible? - Stack Overflowhttps://stackoverflow.com/questions/15596318/is-it-better-to-avoid-using-the-mod-operator-when-possible

由此我们总结出了一个统一的估算方法:大O记号法

  • 我们在估算算法效率时只保留增长最快的一项除了系数以外的部分,相当于只保留了该式子的“数量级”。

特别的,如果一个算法某个部分的运行时间并不随着输入规模的增长而增长,那我们称其的复杂度为常数

常见例子:

O(1)——常数条语句:交换两个元素

O(n)——单重循环求数组和

O(n^{2})——双重循环求数组中相等元素对数

O(2^{n}n)——枚举n个数字组成集合的所有子集,输出子集和

O(2^{n})——Fibonacci数列的递归

斐波那契数的时间复杂度、空间复杂度详解_lxf_style的博客-CSDN博客_斐波那契数列时间复杂度https://blog.csdn.net/lxf_style/article/details/80458519

2.空间复杂度:

        定义:程序所消耗空间的大小,可以将其表示成与输入规模有关的函数,该函数即为空间复杂度

        空间复杂度相对于时间复杂度使用较少。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值