您的位置:首页 > 编程语言 > Go语言

Introduction to Algorithms 算法导论 第4章 递归式 学习笔记及习题解答

2012-02-09 22:41 896 查看
第4章 递归式

主方法:

        n=1:

                T(n) = Θ(1)

        n>1:

                T(n) = aT(n/b) + Θ(n)   (a≥1, b>1)

4.1 代换法

1). 猜测解的形式

2). 用数学归纳法找出使解真正有效的常数

改变变量:

T(n) = 2T(⌊n^(1/2)⌋) + lgn

设m=lgn,则有n=2^m,可得:

T(2^m) = 2T(⌊2^(m/2)⌋) + m

令S(m) = T(2^m) = 2S(m/2) + m

上式解为O(mlgm) = O(lgn*lglgn)

练习

4.1-1 证明 T(n) = T(⌈n/2⌉) + 1的解为O(lgn)

证明:

        假定T(n) ≤ clg(n-b), 则:

        T(n) = T(⌈n/2⌉) + 1

             ≤ clg(⌈n/2 - b⌉) + 1

             < clg(n/2 - b + 1) + 1

             = clg((n-2b+2)/2) + 1

             = clg(n-2b+2) - clg2 + 1

             = clg(n-2b+2) - c + 1

             ≤ clg(n-b)

        明显当c≥1, b≥2时成立。

4.1-2 证明T(n) = 2T(⌊n/2⌋)+n的解为O(nlgn)。证明这个递归的解也是Ω(nlgn)。得到解为Θ(nlgn)。

证明:

        T(n) = 2T(⌊n/2⌋) + n

             ≤ 2T(c⌊n/2⌋lg⌊n/2⌋) + n

             ≤ cnlg(n/2) + n

             = cnlgn - cnlg2 + n

             = cnlgn -cn + n

             ≤ cnlgn

        可知当c≥1时有T(n)=O(nlgn).

        cnlgn ≤ T(n)

              = 2T(c⌊n/2⌋lg⌊n/2⌋)+n

              ≤ cnlg(n/2) + n

              =cnlgn -cn + n

        当0<c≤1时有T(n)=Ω(nlgn)。

        由定义知T(n) = Θ(nlgn).

4.1-3 证明: 通过作不同的假设,对递归式4.4我们可以克服在证明边界条件T(1)=1时的困难,同时无需调整归纳证明中的边界条件。

证明: 令递归式为c(n+b)lg(n+b), b≥1可克服边界条件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 c