算法设计与分析之基础知识

本篇文章大部分内容出自《算法设计与分析(第二版)》,仅作个人学习记录。

一 函数的渐近的界

(1)若存在正数 c c c n 0 n_{0} n0使得对一切 n ≥ n 0 有 0 ≤ f ( n ) ≤ c g ( n ) n \ge n_{0}有0 \le f(n) \le cg(n) nn00f(n)cg(n)成立,则称 f ( n ) f(n) f(n)的渐近的上界是 g ( n ) g(n) g(n),记作 f ( n ) = O ( g ( n ) ) . f(n)=O(g(n)). f(n)=O(g(n)).
(2)若存在正数 c c c n 0 n_{0} n0使得对一切 n ≥ n 0 有 0 ≤ c g ( n ) ≤ f ( n ) n \ge n_{0}有0 \le cg(n) \le f(n) nn00cg(n)f(n)成立,则称 f ( n ) f(n) f(n)的渐近的下界是 g ( n ) g(n) g(n),记作 f ( n ) = Ω ( g ( n ) ) . f(n)=\varOmega(g(n)). f(n)=Ω(g(n)).
(3)若对于任意正数 c c c都存在 n 0 n_{0} n0,使得当 n ≥ n 0 n \ge n_{0} nn0时有 0 ≤ f ( n ) ≤ c g ( n ) 0 \le f(n) \le cg(n) 0f(n)cg(n)成立,则记作 f ( n ) = o ( g ( n ) ) f(n)=o(g(n)) f(n)=o(g(n))
(4)若对于任意正数 c c c都存在 n 0 n_{0} n0,使得当 n ≥ n 0 n \ge n_{0} nn0时有 0 ≤ c g ( n ) ≤ f ( n ) 0 \le cg(n) \le f(n) 0cg(n)f(n)成立,则记作 f ( n ) = w ( g ( n ) ) f(n)=w(g(n)) f(n)=w(g(n))
(5)若 f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n)) f ( n ) = Ω ( g ( n ) ) f(n)= \varOmega(g(n)) f(n)=Ω(g(n)),则记作 f ( n ) = Θ ( g ( n ) ) f(n)= \Theta (g(n)) f(n)=Θ(g(n))

二 用递推归纳法求解递推方程

例:
W ( n ) = 2 W ( n / 2 ) + n − 1 , n = 2 k W(n)=2W(n/2)+n-1,n=2^{k} W(n)=2W(n/2)+n1,n=2k
W ( 1 ) = 0 W(1)=0 W(1)=0
解:
W ( n ) = 2 W ( 2 k − 1 ) + 2 k − 1 W(n)=2W(2^{k-1})+2^{k}-1 W(n)=2W(2k1)+2k1
    = 2 [ 2 W ( 2 k − 2 ) + 2 k − 1 − 1 ] + 2 k − 1 =2[2W(2^{k-2})+2^{k-1}-1]+2^{k}-1 =2[2W(2k2)+2k11]+2k1
    = 2 2 W ( 2 k − 2 ) + 2 k − 2 + 2 k − 1 =2^{2}W(2^{k-2})+2^{k}-2+2^{k}-1 =22W(2k2)+2k2+2k1
    = 2 2 [ W ( 2 k − 3 ) + 2 k − 2 − 1 ] + 2 k − 2 + 2 k − 1 =2^{2}[W(2^{k-3})+2^{k-2}-1]+2^{k}-2+2^{k}-1 =22[W(2k3)+2k21]+2k2+2k1
    = 2 3 W ( 2 k − 3 ) + 2 k − 2 2 + 2 k − 2 + 2 k − 1 =2^{3}W(2^{k-3})+2^{k}-2^{2}+2{k}-2+2{k}-1 =23W(2k3)+2k22+2k2+2k1
    = . . . =... =...
    = 2 k W ( 1 ) + k 2 k − ( 2 k − 1 + 2 k − 2 + . . . + 2 + 1 ) =2^{k}W(1)+k2^{k}-(2^{k-1}+2^{k-2}+...+2+1) =2kW(1)+k2k(2k1+2k2+...+2+1)
    = k 2 k − 2 k + 1 =k2^{k}-2^{k}+1 =k2k2k+1
    = n l o g n − n + 1 =nlogn-n+1 =nlognn+1
对结果进行归纳验证。把n=1代入上述公式的
W ( 1 ) = 1 ∗ l o g 1 − 1 + 1 = 0 W(1)=1*log1-1+1=0 W(1)=1log11+1=0
符合初始条件,将结果代入原递推方程的右边得
2 W ( n / 2 ) + n − 1 = 2 [ 2 k − 1 l o g 2 k − 1 − 2 k − 1 + 1 ] + 2 k − 1 2W(n/2)+n-1=2[2^{k-1}log2^{k-1}-2^{k-1}+1]+2^{k}-1 2W(n/2)+n1=2[2k1log2k12k1+1]+2k1
          = 2 k ( k − 1 ) − 2 k + 2 + 2 k − 1 =2^{k}(k-1)-2^{k}+2+2^{k}-1 =2k(k1)2k+2+2k1
          = k 2 k − 2 k + 1 =k2^{k}-2^{k}+1 =k2k2k+1
          = n l o g n − n + 1 =nlogn-n+1 =nlognn+1
          = W ( n ) =W(n) =W(n)
这说明得到得解满足原来的递推方程。


三 主定理

a ≥ 1 , b > 1 a \ge 1, b >1 a1,b>1为常数, f ( n ) f(n) f(n)为函数, T ( n ) T(n) T(n)为非负整数,且 T ( n ) = a T ( n / b ) + f ( n ) T(n) = aT(n/b)+f(n) T(n)=aT(n/b)+f(n),则有以下结果:
(1)若 f ( n ) = O ( n l o g b a − ϵ ) , ϵ > 0 f(n)=O(n^{log_{b}^{a-\epsilon}}),\epsilon>0 f(n)=O(nlogbaϵ),ϵ>0,那么 T ( n ) = Θ ( n l o g b a ) T(n)= \Theta(n^{log_{b}^{a}}) T(n)=Θ(nlogba)
(2)若 f ( n ) = Θ ( n l o g b a ) f(n)=\Theta (n^{log_{b}^{a}}) f(n)=Θ(nlogba),那么 T ( n ) = Θ ( n l o g b a l o g n ) T(n)=\Theta (n^{log_{b}^{a}}logn) T(n)=Θ(nlogbalogn)
(1)若 f ( n ) = Ω ( n l o g b a + ϵ ) , ϵ > 0 f(n)=\varOmega(n^{log_{b}^{a+\epsilon}}),\epsilon>0 f(n)=Ω(nlogba+ϵ),ϵ>0,且对于某个常数 c < 1 c<1 c<1和充分大的n有 a f ( n / b ) ≤ c f ( n ) af(n/b) \le cf(n) af(n/b)cf(n),那么 T ( n ) = Θ ( f ( n ) ) T(n)= \Theta(f(n)) T(n)=Θ(f(n))

例一:求递推方程 T ( n ) = 9 T ( n / 3 ) + n T(n)=9T(n/3)+n T(n)=9T(n/3)+n
解:上述递推方程中的a=9,b=3,f(n)=n,那么
          n l o g 3 9 = n 2 , f ( n ) = O ( n l o g 3 9 − 1 ) n^{log_{3}^{9}}=n^{2},f(n)=O(n^{log_{3}^{9-1}}) nlog39=n2,f(n)=O(nlog391)
这里相当于主定理的第一宗情况,其中 ϵ = 1 \epsilon=1 ϵ=1。根据定理得到 T ( n ) = Θ ( n 2 ) T(n)= \Theta(n^{2}) T(n)=Θ(n2).

例二:求递推方程 T ( n ) = T ( 2 n / 3 ) + 1 T(n)=T(2n/3)+1 T(n)=T(2n/3)+1
解:上述递推方程中的a=1,b=3/2,f(n)=1,那么
          n l o g 3 / 2 1 = n 0 = 1 , f ( n ) = 1 n^{log_{3/2}^{1}}=n^{0}=1,f(n)=1 nlog3/21=n0=1,f(n)=1
这里相当于主定理的第二宗情况。根据定理得到 T ( n ) = Θ ( n 0 l o g n ) = Θ ( l o g n ) T(n)= \Theta(n^{0}logn)= \Theta(logn) T(n)=Θ(n0logn)=Θ(logn).

例三:求递推方程 T ( n ) = 3 T ( n / 4 ) + n l o g n T(n)=3T(n/4)+nlogn T(n)=3T(n/4)+nlogn
解:上述递推方程中的a=3,b=4,f(n)=nlogn,那么
          n l o g n = Ω ( n l o g 4 3 + ϵ ) = Ω ( n 0.793 + ϵ ) , ϵ ≈ 0.2 nlogn=\varOmega(n^{log^{3+ \epsilon}_{4}})=\varOmega(n^{0.793+\epsilon}),\epsilon \approx0.2 nlogn=Ω(nlog43+ϵ)=Ω(n0.793+ϵ),ϵ0.2
此外,要使 a f ( n / b ) ≤ c f ( n ) af(n/b)\le cf(n) af(n/b)cf(n)成立,代入 f ( n ) = n l o g n f(n)=nlogn f(n)=nlogn,得到
          3 n 4 l o g n 4 ≤ c n l o g n \frac{3n}{4}log\frac{n}{4}\le cnlogn 43nlog4ncnlogn
显然只要 c ≥ 3 / 4 c\ge 3/4 c3/4,上述不等式就可以对充分大的 n n n成立。这里相当于主定理的第三种情况。因此有 T ( n ) = Θ ( f ( n ) ) = Θ ( n l o g n ) T(n)= \Theta(f(n))= \Theta(nlogn) T(n)=Θ(f(n))=Θ(nlogn).

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值