第二节 渐近符号、递归及解法

一、渐进符号

    1、O

        f(n)=O(g(n)) 表示存在适当的常数c和n0使得f(n)小于或等于c*g(n),对于充分大的n成立

        0<=f(n)<=c*g(n)  (c>0,n0>0,n>=n0)

        例:2n^2 = O(n^3)

        粗略的说就是去掉首项系数和低阶项,剩下的小于或等于n^3

        O粗略的说就是小于或等于,这里的等号不对称

        f(n)是属于g(n)构成的函数集,可以定义O(g(n))为一个函数集

        O(g(n))={f(n): 存在常数 c>0 n0>0 使得0<=f(n)<=c*g(n) 对于所有n>=n0}

        即可以理解为2n^2 属于O(n^3)

        例:f(n)=n^3+O(n^2)

            即存在某个函数h(n)在O(n^2)中使得f(n)=n^3+h(n),总的来说有低阶项以某个常数乘以n^2为上界,对于足够大的n成立

         如果O符号在左边的话.等号为"是"的意思

        n^2+O(n) = O(n^2)

         对于任何f(n)属于O(n),总有一个函数h(n)属于O(n^2),使得n^2+f(n)=h(n)

        对于任何在左边宏展开的表达式,都能在右边找到一个对应的展开,使左右相等

    2、Ω

        Ω(g(n))={f(n):存在一个常数c>0,n0>0使得0<=c*g(n)<=f(n)对于任何n>=n0}

       例: 根号n=Ω(lgn)

            根号n至少是lgn的常数倍

        Ω对应大于或者等于

    3、θ

        θ(g(n))=O(g(n))∩Ω(g(n)) 故θ代表等于即n^2=θ(n^2)

    4、o、w  o相当于小于,w相当于大于,任意常数c都存在一个任意常数n0,不等式必须对于所有的c成立

        例:2n^2=o(n^3)  n0=2/c 不管c多小,依然成立

二、解递归式

    1.代换法

        1.1. 猜答案  大致知道形式即可

        1.2. 用数学归纳法证明

        1.3. 寻找常数系数,查找什么系数可以成立

        例:T(n)=4T(n/2)+n

            T(1)=θ(1)

             试猜想T=O(n^3)

             T(k) = c k^3 k<n

             T(n) = 4T(n/2)+n<=4c(n/2)^3+n

                                           =1/2*c*n^3+n=cn^3-(1/2*c*n^3-n)

                                            <=cn^3

            (1/2*c*n^3-n)>=0  c>=1,n>=1   

            证明紧界 T=O(n^2)

            T(k) = c k^2  k<n

            T(n) = 4T(n/2)+n<=4c(n/2)^2+n

                                          =cn^2+n=cn^2-(-n)

                                            <=cn^2

            -n>=0 n>=0 n!=0 故不成立

            改进数学归纳 增加低阶项

            T(k) = c1 k^2-c2*k

            T(n)= 4T(n/2)+n = 4(c1 (n/2)^2-c2*n/2)+n

                                        =c1 n^2 - 2c2 * n + n

                                        =c1 n^2 - c2*n - (c2-1)*n

                                        <=c1 n^2 - c2 * n

            c2-1>=0 即 c2>=1

            对于特殊情况

            T(1)<=c1-c2

            T(1)=θ(1)

            故c1需要足够大

    2.递归树法

            例:T(n) = T(n/4)+T(n/2)+n^2

    3.主方法

        只能运用到特定的递归式上,符合T(n)=aT(n/b)+f(n),每个子问题的规模应该相等

        a>=1  b>1  f(n) 渐进趋正(对于足够大的n,f(n)是正的,存在某个特定n0,当n>=n0时,f(n)>0)

        简单思路:比较非递归函数f(n)和n^logba(logba是递归树中叶结点的数量)

        3.1.1 f(n)较小

                f(n)=O(n^(logba-ε))(ε>0)  =>  T(n) = θ(n^(logba))

        3.1.2 f(n)相等

                f(n) = θ(n^logba*(lgn)^k)(k>=0)

                T(n) = θ(n^logba*(lgn)^(k+1))

        3.1.3 f(n)增长较快

                f(n) = Ω(n^(logba+ε))(ε>0)

                同时对f(n)有一个假设,考虑f(n)如何增长

                af(n/b)<=(1-ε′)*f(n) 存在 ε′>0 =>T(n)=θ(f(n))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值