目录
一、计算机的资源角度评价算法
1.时间限制:
(1)CPU的运算速度是有限制的:
例如:CPU的主频(CPU每秒钟产生脉冲信号的次数/每秒钟的时钟周期个数)从某方面角度可以衡量计算机运算速度的快慢,但其与运算速度不是简单的线性关系。
以2.1GHz为例,一秒钟该CPU可以产生2.1*次脉冲信号,如果一台计算机每个时钟周期可以完成1条指令,那么该计算机1s之内就可以运行2.1*条指令。
(2)等待问题结果的时间也是有限的 ,需要具有时效性。
有关于CPU的科普,可参考
什么是CPU的主频 - 百度文库 (baidu.com)https://wenku.baidu.com/view/37b451708e9951e79b8927c8.html
2.内存限制:
计算机内存的大小是有限制的,计算机在运行程序的时候,单个变量、数组甚至算法运行过程中,函数互相调用时所记录的调用栈信息,都是在内存上存储的。而计算机的内存不可能无限大,内存的大小限制了我们所开变量的大小。
3.实现难度:
算法的实现难度就是该算法是否很容易的用编程语言准确表达,实现难度是一个很实际的评价因素。
例如:当B'算法比B的算法难度高很多,但是时间上的缩减相比于难度的提升的比率要少,此时我们不倾向于将B算法更换为B'算法。
特殊场景下算法的衡量指标
近似算法中的近似比:
在解决最优化问题的近似算法中,有一个“近似比”的评价指标。
很多最优化问题(即找到某种场景下最有利的解决方案),找到精确最优解的算法可能要运行很长时间,或者根本不可能在可接受时间内运行完毕。但是如果不要求一定是严格的最优解决方案的话,我们可以设计一些近似算法在很少的时间内给出一个“比较优”的方案。所以,该近似算法给出的解,和严格最优解之间的差别,也就是近似比,就成了衡量近似算法的一个非常重要的指标。
机器学习模型算法的评估指标:
机器学习算法可以利用已有数据集作为输入,得到一个模型,从而实现一些分类或预测等任务。而为了评价所得模型的好坏,机器学习领域提出了一些评估指标,比如准确率,精确率,召回率等。
二、评价算法常用的两种函数
1.时间复杂度:
定义:算法运行的时间和输入规模的关系。
算法运行时间:每条语句的运行都要消耗一定时间,程序的运行时间与语句的数量有关。
输入规模:通常情况下,输入规模越大,语句的条数越多。
则可以看出:算法的运行时间是关于输入规模的一个函数,称为算法的时间复杂度。
T(n):n表示输入规模,T(n)表示算法的运行时间。
值得注意的是,算法的运行时间有时候不只和输入规模有关,也与具体的询问内容有关。所以我们经常采用的一个评价指标就是“最坏时间复杂度”。
最坏时间复杂度:规模为n的所有可能输入中,最坏情况下算法的运行时间。
算法的运行时间可以用算法运行的语句数量近似表示,然而代码的运行时间同时受语句种和运行环境的影响:
(1)即便对于一条效果相同的语句,不同的实现方式运行的时间也不一样。
(2) 即便是同一段代码,用不同的编译器编译成可执行程序,放在不同架构的处理器下运行,其运行时间也都是不一样的。
(1)详情可参考
由此我们总结出了一个统一的估算方法:大O记号法
- 我们在估算算法效率时只保留增长最快的一项除了系数以外的部分,相当于只保留了该式子的“数量级”。
特别的,如果一个算法某个部分的运行时间并不随着输入规模的增长而增长,那我们称其的复杂度为常数。
常见例子:
O(1)——常数条语句:交换两个元素
O(n)——单重循环求数组和
O()——双重循环求数组中相等元素对数
O(n)——枚举n个数字组成集合的所有子集,输出子集和
O()——Fibonacci数列的递归
2.空间复杂度:
定义:程序所消耗空间的大小,可以将其表示成与输入规模有关的函数,该函数即为空间复杂度。
空间复杂度相对于时间复杂度使用较少。