算法复杂性渐近意义下的记号——(O、Ω、θ、o、ω)

一、算法的复杂性分析

算法复杂性是算法运行所需的计算机资源量

1.需要的时间资源的量称为时间复杂性,T=T(N,I)

2.需要的空间资源的量称为空间复杂性,S = S(N,I)

N代表问题的规模,I代表输入(实例))

1.时间复杂性是输入为I时的跟规模n相关的算法运行时间增长率

2.空间复杂性是输入为I时的跟规模n相关的算法运行空间增长率


二、渐近意义下的记号含义:O、Ω、θ、o、ω

      1.渐近上界记号 O(O,/əʊ/,大Oh):定义了算法的上界,O只定义上界,只要f(n)不大于上界g(n),就可以说 f(n)=O(g(n))。

      2.非紧渐近上界 o(o,/əʊ/,小oh):定义的也是算法的上界,不过它不包含等于,是一种不精确的上界,或者称作松上界(某些书籍翻译为非紧上界),o表示仅仅是大O去掉等于的情况,其他行为与大O一模一样。

      3.渐近下界记号 Ω(Ω,/oʊˈmeɡə/,大Omega):定义了算法的下界,Ω只定义下界,只要f(n)不小于下界g(n),就可以说 f(n)=Ω(g(n))。

      4.非紧渐近下界 ω(ω,/oʊˈmeɡə/,小omega):定义的也是算法的下界,不过它不包含等于,是一种不精确的下界,或者称作松下界(某些书籍翻译为非紧下界)。ω表示仅仅是大Ω去掉等于的情况,其他行为与大Ω一模一样。

      5.渐近紧确记号 Θ(Θ,/ˈθiːtə/,theta):定义了一种精确的渐近行为,Θ同时定义了上界和下界f(n)位于上界和下界之间,且包含等号


三、渐近意义下的记号作用:O、Ω、θ、o、ω

1.渐近上界记号 O

      假设:g(n)是定义在正数集上的正函数;T(n)为算法的时间复杂性;T_{max}(n)为算法最坏的时间复杂性;T_{min}(n)为算法最好的时间复杂性;n是数据规模。

若:T(n) = O(g(n))

含义:算法在任何实例情况下,其时间复杂性的阶不超过上界g(n)的阶,它的时间复杂性的阶要小于等于上界g(n)的阶。

即:\displaystyle\lim_{x \to \infty}\frac{T_{max}(n)}{g(n)} = c \neq 0,c为常数

例如:T_{max} = \frac{n^2}{2}g(n) = n^2\displaystyle\lim_{x \to \infty}\frac{T_{max}(n)}{g(n)} = \displaystyle\lim_{x \to \infty}\frac{\frac{n^2}{2}}{n^2} = \frac{1}{2}

故:T(n) = O(g(n)) = O(n^2)

2.非紧渐近上界 o

      假设:g(n)是定义在正数集上的正函数;T(n)为算法的时间复杂性;T_{max}(n)为算法最坏的时间复杂性;T_{min}(n)为算法最好的时间复杂性;n是数据规模。

若:T(n) = o(g(n))

含义:算法在任何实例情况下,其时间复杂性的阶小于上界g(n)的阶,它的时间复杂性的阶要小于上界g(n)的阶。

即:\displaystyle\lim_{x \to \infty}\frac{T_{max}(n)}{g(n)} = 0

例如:T_{max} = C_1nlogng(n) = n^2\displaystyle\lim_{x \to \infty}\frac{T_{max}(n)}{g(n)} = \displaystyle\lim_{x \to \infty}\frac{C_1nlogn}{n^2} = 0

故:T(n) = o(g(n)) = o(n^2)

3.渐近下界记号 Ω

      假设:g(n)是定义在正数集上的正函数;T(n)为算法的时间复杂性;T_{max}(n)为算法最坏的时间复杂性;T_{min}(n)为算法最好的时间复杂性;n是数据规模。

若:T(n) = \Omega (g(n))

含义:算法在任何实例情况下,其时间复杂性的阶不低于下界g(n)的阶,它的时间复杂性的阶要大于等于下界g(n)的阶。

即:\displaystyle\lim_{x \to \infty}\frac{T_{min}(n)}{g(n)} = c \neq 0,c为常数

例如:T_{min} = 2ng(n) = n\displaystyle\lim_{x \to \infty}\frac{T_{min}(n)}{g(n)} = \displaystyle\lim_{x \to \infty}\frac{2n}{n} = 2

故:T(n) = \Omega (g(n)) = \Omega (n)

4.非紧渐近下界 ω

      假设:g(n)是定义在正数集上的正函数;T(n)为算法的时间复杂性;T_{max}(n)为算法最坏的时间复杂性;T_{min}(n)为算法最好的时间复杂性;n是数据规模。

若:T(n) = \omega (g(n))

含义:算法在任何实例情况下,其时间复杂性的阶大于下界g(n)的阶,它的时间复杂性的阶要大于下界g(n)的阶。

即:\displaystyle\lim_{x \to \infty}\frac{T_{min}(n)}{g(n)} = \infty

例如:T_{min} = nlogng(n) = n\displaystyle\lim_{x \to \infty}\frac{T_{min}(n)}{g(n)} = \displaystyle\lim_{x \to \infty}\frac{nlogn}{n} = \infty

故:T(n) = \omega (g(n)) = \omega (n)

5.渐近紧确记号 Θ

      假设:g(n)是定义在正数集上的正函数;T(n)为算法的时间复杂性;T_{max}(n)为算法最坏的时间复杂性;T_{min}(n)为算法最好的时间复杂性;n是数据规模。

含义:算法在任何实例情况下,其时间复杂性的上界和下界的阶相等,都是g(n)

\Omega (g(n)) = O(g(n)) = g(n)

例如:有一个算法A:最坏情况:T_{max}(n) = C_1n^2+n+4

                    最好情况: T_{min}(n) = C_2n^2

存在g(n)=n^2,有T(n) = \Omega (g(n))T(n) = O(g(n))

则:\Omega (g(n)) = O(g(n))

故:T(n) = \Theta (g(n)) = \Theta (n^2)

  • 25
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值