普林斯顿公开课 算法1-5:算法理论

本节主要解说的是算法的复杂度。算法


算法性能


算法的性能分为三种:数组

  • 最佳状况:计算时间最短的状况性能

  • 最差状况:计算时间最长的状况优化

  • 平均状况:随机输入的指望开销spa


以二分查找为例


最佳状况是1,因为第一次就有可能找到需要找的整数。设计

最差状况是logN开发

平均状况是logN数学


算法复杂度


算法复杂度用于定义问题的难度,另外也有助于开发最优化的算法,算法复杂度可以经过分析最坏状况来下降输入数据对算法性能的影响。class


为了简化问题难度的表示方法,算法复杂度下降了算法分析的细节,忽略常数系数。循环


最优算法


所谓的最佳算法就是在不论什么状况下都能保证执行时间在理论范围内,而且没有更好的算法能够超越。


算法复杂度表示方法


常见的表示方法有比方O(N^2)表示算法最大可能的复杂度,Ω(N^2)表示最小可能的复杂度,Θ(N^2)表示算法复杂度的增加状况。


举例


问题描写叙述:推断一个数组中有多少个0。

以暴力方法为例。

这个问题中性能上限就是指某个特定的算法能实现的复杂度。

算法下限就是通过数学方法的证实,最优算法的复杂度是Ω(N)。因为数组中每个元素都有多是0,必须要循环整个数组才干得出结果。

最优算法:这个问题中暴力算法就是最优算法,因此最优算法的复杂度为Θ(N^2)。


算法的开发步骤


  1. 开发一个算法

  2. 证实最低下限


假设开发出的算法复杂度和证实得出的最低复杂度不相符的话,可以去寻找新的算法。也有多是证实出错,固然证实出错的状况是比較少见的。


1970年代是算法设计的黄金年代。


误区


关于算法复杂度有下面误区:

  • 太在意最坏状况。事实上实际应用中最坏状况基本上不会出现。

  • 试图经过提升复杂度的常数系数来提升性能。

  • 将大O当成近似复杂度,事实上真正的近似复杂度称之为波浪记法。

相关文章
相关标签/搜索