## 如何衡量程序运行的效率
当你在大数据环境中开发代码时,你一定遇到过程序执行好几个小时,甚至好几天的情况,或者是执行过程中电脑几乎卡死的情况:
1.如果这个效率低下的系统是离线的,那么它会让我们的开发周期,测试周期变的很长;
2.如果这个效率低下的系统是在线的,那么它随时具有时间爆炸或者内存爆炸的可能性。
因此,衡量代码的运行效率对于一个工程师而言,是一项非常重要的基本功。
**1.复杂度是什么**
复杂度是衡量代码运行效率的重要度量因素,在介绍复杂度之前,有必要先看一下复杂度和计算机实际任务处理效率的关系,从而了解降低复杂度的必要性。
计算机通过一个个程序去执行计算任务,也就是对输入数据进行加工处理,并最终得到结果的过程,每个程序都是由代码构成的。可见,编写代码的核心就是要完成计算。但对于同一个计算任务。不同计算方法得到结果的过程复杂程度是不一样的。这对你实际的任务处理效率就有了非常大的影响。
**复杂度一般用两个维度来衡量(时间和空间);**
复杂度是一个关于输入数据量n的函数。假设你的代码复杂度是f(n),那么就用大些字母O和括号,把f(n)扩起来就可以了,即O(f(n))。例如,O(n)表示的是,复杂度与计算实例的个数n线性相关,O(logn)表示的是,复杂度与计算实例的个数n对数相关。
首先。复杂度与具体的常系数无关,例如,O(n)和O(2n)表示的同样的复杂度,解析:O(2n) 等于O(n+n),也等于O(n)+O(n)。也就是说,一段O(n)复杂度的代码只是先后执行两遍,其复杂度是一致的。
其次,多项式级的复杂度相加的时候,选择高者作为结果,例如O(n*n)+O(n)和O(n*n)表示的是同样的复杂度,解析:O(n*n)+O(n)=O(n*n+n)。随着n越来越大,二阶多项式的变化率要比一阶多项式更大的。因此,只需要通过更大变化率的二阶多项式来表示复杂度就可以了。
**待续......**
数据结构与算法之复杂度介绍
最新推荐文章于 2020-09-17 17:11:17 发布