算法分析基础学习笔记

来源:互联网 发布:中国数据分析行业协会 编辑:程序博客网 时间:2024/06/05 18:27

算法分析基础学习笔记


首先恩,复杂度是个神马东西(o゚▽゚)o

复杂度分为时间复杂度和空间复杂度。 ̄ω ̄= 复杂度这个玩意是用来表征某段程序的运行效率的。程序的运行效率的具体表现形式又分为该程序运行时解决问题所用时间多少和所用内存大小。其中,解决问题所用时间多少的数量级被抽象为时间复杂度,一般来说,时间复杂度越小越好,所代表的的时间需求就越少;解决问题所用的内存多少的数量级被抽象为空间复杂度,且空间复杂度越小越好,所代表的空间需求就越小。

来谈谈令人色变的Ο和Ω符号,恩,还有Θ符(`・ω・´)

Ο和Ω这两符号是一对天生的好基友。它们都是用来近似地表征某段程序的复杂度的。
我们先来看一下Ο,Ω,Θ,o的数学定义。
(摘自《数据结构与算法分析》一书)

定义:如果存在正常数c和n0 使得当 N >=n0 时T(N)<=cf(N),则记为T(N)=O(f(N))。
定义:如果存在正常数c和n0 使得当 N >=n0 时T(N)>=cg(N),则记为T(N)=Ω(g(N))。
T(N)=Θ(h(N)) 当且仅当 T(N)=O(h(N)) 且 T(N)=Ω(h(N))。
若 T(N)=O(p(N)) 且 T(N)!=Θ(p(N)) 则记 T(N)=o(p(N))。

在数学上,大O是用另一个(通常更简单的)函数来描述一个函数数量级的渐近上界。在这里,我们的实际算法时间复杂度为T(N),即T(N)为对算法实际运行时间的一个量度。第一个定义是说,最后总存在一个点n0,在它以后cf(N)至少与T(N)一样大。若忽略常数因子c,f(N)至少与T(N)一样大。这就是说,f(N)总会大于或等于T(N),这样,f(N)就形成了一个对T(N)的渐进上界,此时称O(f(N))为算法的最坏情况。如下图。

算法复杂度的最差情况大O

类似的,我们可以从第二个定义了解到g(N)为T(N)的渐进下界,此时称此时称Ω(g(N))为算法的最佳情况。如下图。

算法的最佳情况

而Θ符号就是说算法的时间复杂度恰好能用函数h(N)表征,即T(N)=O(h(N)) 和 T(N)=Ω(h(N)) 同时满足,这样,上下界就重合为一条确定的曲线,从而夹在上下界之间的T(N)就只能为这条曲线了。

然后o符号是说p(N)应该小于T(N)而不能达到T(N)。如下图。

小o