算法的性能分析是算法设计中很是重要的方面,要想编写出能高效运行的程序,咱们就须要考虑到算法的效率。
算法的效率主要由如下两个复杂度来评估:算法
时间复杂度:评估执行程序所需的时间。能够估算出程序对处理器的使用程度。算法的时间复杂度通常是问题规模的函数,一般用T=T(n)表示,其中,n表示问题的规模,即算法所处理的数据量。T表示算法所用时间。数据结构
算法的执行时间=该算法全部语句执行次数(包括重复执行次数)* 执行每条语句所花费时间总和。因为每条语句的执行时间是cpu速度决定的,对计算机而言是常数,所以能够忽略不计,只考虑语句的执行次数(频率或频度)。为了进一步简化计算,能够只用算法中某条重要语句(执行时间最长的语句)的执行频度。换句话说就是时间复杂度是主要语句频度的倍数。函数
备注:一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但咱们不可能也没有必要对每一个算法都上机测试,只需知道哪一个算法花费的时间多,哪一个算法花费的时间少就能够了。而且一个算法花费的时间与算法中语句的执行次数成正比例,哪一个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。性能
空间复杂度:评估执行程序所需的存储空间。能够估算出程序对计算机内存的使用程度。不包括算法程序代码和所处理的数据自己所占空间部分。一般用所使用额外空间的字节数表示。其算法比较简单,记为S=S(n),其中,n表示问题规模。测试
设计算法时,通常是要先考虑系统环境,而后权衡时间复杂度和空间复杂度,选取一个平衡点。不过,时间复杂度要比空间复杂度更容易产生问题,所以算法研究的主要也是时间复杂度,不特别说明的状况下,复杂度就是指时间复杂度。 设计
评价算法时间复杂度大小须要考虑的因素:内存
1,计算机硬件系统的运行速度。性能分析
2,所使用的软件环境。效率
3,算法自己的策略,采用不一样的存储结构和不一样的算法过程,是影响时间复杂度的本质缘由之一。软件
4,所处理的数据量多少。
算法性能的评价方法:
1,过后统计法。
2,预先计算估算法。
1>精确计算法
2>近似估算法
这里我介绍数据结构最经常使用的方法,也就是第二种的第二类。
T(n)=O(f(n));S(n)=O(g(n))
其中,f(n)和g(n)是一个已知的函数,做为计较的尺度。
一般的比较尺度有:
O(1)称为常量级,算法的时间复杂度是一个常数。
O(n)称为线性级,时间复杂度是数据量n的线性函数。
O(n²)称为平方级,与数据量n的二次多项式函数属于同一数量级。
O(n³)称为立方级,是n的三次多项式函数。
O(logn)称为对数级,是n的对数函数。
O(nlogn)称为介于线性级和平方级之间的一种数量级
O(2ⁿ)称为指数级,与数据量n的指数函数是一个数量级。
O(n!)称为阶乘级,与数据量n的阶乘是一个数量级。
它们之间的关系是: O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(n³)<O(2ⁿ)<O(n!)