Python数据结构与算法03:算法分析:大O表示法

:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性。

本文阅读时间约为4分钟

什么是算法分析

Python的强制缩进是好的,因为保证了语句块功能和视觉效果的统一。不强制缩进有时会造成灾难性后果,一个反面案例就是苹果公司的一个低级BUG,由于C语言源代码书写缩进对齐的疏忽,造成了SSL连接验证被跳过。

计算资源指标

什么是计算资源?一种是算法解决问题过程中需要的存储空间或内存。另一种是算法的执行时间。

大O表示法

从理论计算机科学中借鉴而来,我们称之为大O符号。它来自希腊字母Omicron,Donald Knuth在测量这些东西时使用了它。我们将大O看作函数渐进式增长的上限。

赋值语句同时包含了(表达式)计算和(变量)存储两个基本资源。

问题规模:影响算法执行时间的主要因素。

算法运行时间分为最好、最差、平均情况,其中平均情况体现了算法的主流性能。

运算量的大小基本上取决于迭代的次数,最坏的情况。至于乘法系数和附加的常数,在迭代数量n足够大的情况下,影响足够小。所以,最重要的影响时间复杂度的因子是迭代的次数n。

其它算法复杂度表示法

大O表示法——表示了所有上限中最小的那个上限。

大Ω表示法——表示了所有下限中最大的那个下限。f(n)=Ω(g(n))当且仅当g(n)=o(f(n))。

大θ表示法——如果上下限相同,那么就可以用大θ表示。f(n)=θ(g(n))当且仅当f(n)=O(g(n))且f(n)=Ω(g(n))。

本课程主要研究大O表示法。

时间复杂度按低到高排列如下:

  • O(1)——constant running time常数。
  • O(logn)——logarithmic running time对数。例如,二分搜索法。
  • O(n)——linear running time线性。例如递归,阶乘的例子。
  • O(nlogn)——log-linear running time, 对数线性。
  • O(n^c)——polynomial running time多项式幂。通常发生在嵌套循环当中。
  • O(c^n)——exponential running time指数。

复杂度越高,需要的运行时间就越长。我们需要尽可能短的时间,所以上述列表越往上越好。

To be continued.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容