菜鸟玩算法·数据结构与算法·第2期·复杂度大O表示法

本文深入探讨了大O表示法的概念及其性质,通过具体函数举例说明如何应用大O表示法来评估算法的时间复杂度。同时,文章也提到了特殊情况下的表示方法——O(OO),并解释了其适用场景。

概念

    如果存在正数n和N,当n>N时,有f(n) \leq mg(n),则f(n) = O(g(n))。该描述方法主要是上篇提到的渐进复杂度的表示方法,是1894Paul Bachmann提出的。

    下面来看一个函数举例说明:f(x) = 3x^3+3x+1,对应的表示f(x)=O(x^3)。我们反推一下公式,看是否成立:

                                                                        3x^3+3x+1 \leq mx^3

                                                                        3+\frac{3}{x^2}+\frac{1}{x^3} \leq m

      当x>N时,满足上述公式,所以f(x)的为O(x^3)大O表示。

性质

(1)如果f(n) = O(h(n)), g(n) = O(h(n)) \rightarrow f(n) + g(n) = O(h(n))

(2)传递性,f(n) = O(g(n)), g(n) = O(h(n)) \rightarrow f(n) = O(h(n))

(3)特殊的对数函数,任意的a和b(b不等于1),log_{a}n = O(log_{b}n)

          (即:对数函数都满足同样的增长特性)

(4)对于幂函数,任何正数m,n^k = O(n^{k+m})

 

说明

    对于大O表示也是存在特殊情况的,例如f(x)=10^8xg(x)=x^2,它们对应的表示分别为O(x)O(x^2),如果根据大O表示法来看,O(x^2)的计算复杂度是比O(x)大的。但是根据函数来看这是不严谨的定论,当x\geq 10^8时,O(x^2)的计算复杂度是比O(x)大的。但是,我们在程序中可能很难处理这么多的数据,所以针对这种常数太大没有实际意义情况Udi Manber提出使用O(OO)符号对这类函数表示。

    O(OO)的表示法:f(n)=OO(g(n)),其中f(x)=10^8x就是这种情况f(x)=OO(x)常数太大没有实际意义,还有根据具体情况来看。

 

更多《计算机视觉与图形学》知识,可关注下方公众号:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值