本节主要讲解的是算法的复杂度。
算法的性能分为三种:
最佳情况:计算时间最短的情况
最差情况:计算时间最长的情况
平均情况:随机输入的期望开销
最佳情况是1,因为第一次就有可能找到需要找的整数。
最差情况是logN
平均情况是logN
算法复杂度用于定义问题的难度,另外也有助于开发最优化的算法,算法复杂度可以通过分析最坏情况来减少输入数据对算法性能的影响。
为了简化问题难度的表示方法,算法复杂度减少了算法分析的细节,忽略常数系数。
所谓的最佳算法就是在任何情况下都能保证运行时间在理论范围内,而且没有更好的算法能够超越。
常见的表示方法有比如O(N^2)表示算法最大可能的复杂度,Ω(N^2)表示最小可能的复杂度,Θ(N^2)表示算法复杂度的增长情况。
问题描述:判断一个数组中有多少个0。
以暴力方法为例。
这个问题中性能上限就是指某个特定的算法能实现的复杂度。
算法下限就是经过数学方法的证明,最优算法的复杂度是Ω(N)。因为数组中每个元素都有可能是0,必须要循环整个数组才能得出结果。
最优算法:这个问题中暴力算法就是最优算法,所以最优算法的复杂度为Θ(N^2)。
开发一个算法
证明最低下限
如果开发出的算法复杂度和证明得出的最低复杂度不相符的话,可以去寻找新的算法。也有可能是证明出错,当然证明出错的情况是比较少见的。
1970年代是算法设计的黄金年代。
关于算法复杂度有以下误区:
太在乎最坏情况。其实实际应用中最坏情况基本上不会出现。
试图通过提高复杂度的常数系数来提高性能。
将大O当成近似复杂度,其实真正的近似复杂度称之为波浪记法。
普林斯顿公开课 算法1-5:算法理论,布布扣,bubuko.com
原文地址:http://blog.csdn.net/caipeichao2/article/details/27849713