算法设计复习纲要

情报

  1. 按阶递增方式排序函数,可以参考例子1.6(10分)
  2. 求解递推方程,递推公式的主定理和递归树方法要熟悉。(10分)
  3. 利用分治法设计算法(20分)或建立递推关系。
  4. 二分搜索法+蛮力法应用(15分)
  5. 利用动态规划法设计算法,可以参考例子3.4和习题3.1(15分)
  6. 贪心算法。可以参考例子4.2(15分)
  7. 关于算法基本概念的论述题(含题解和难解问题,回溯算法和分支限界算法)(15分)

细说

1.按阶递增方式排序函数,可以参考例子1.6(10分)

例1.6 下面给定一些函数,请把他们按照渐进的界从高到低的顺序进行排列.如果两个函数 f(n) 与 g(n) 的阶相等,则表示为 f(n) = Θ( g(n) )

vaVaVavaVaVaVaVa
l o g 2 n log^2 n log2n 1 1 1 n ! n! n!n2nn1/logn(3/2)n l o g n \sqrt{log n} logn (log n)logn
2 2 n 2^{2^n} 22n n l o g l o g n n^{loglogn} nloglogn n 3 n^3 n3 l o g l o g n loglogn loglogn n l o g n nlogn nlogn n n n 2 l o g n 2^{logn} 2logn l o g n logn logn
l o g ( n ! ) log(n!) log(n!)

解析:
指数函数的阶高于多项式函数的阶,而多项式函数的阶高于对数函数的阶

指数函数: f ( n ) = r n f(n) = r^n f(n)=rn

多项式函数: f ( n ) = a 0 + a 1 n + a 2 n 2 + . . . + a d n d f(n) = a_0 + a_1n+a_2n^2+...+a_dn^d f(n)=a0+a1n+a2n2+...+adnd

对数函数: f ( n ) = l o g b n f(n) = log_bn f(n)=logbn

阶乘函数: f ( n ) = n ! f(n) = n! f(n)=n!

  • n ! = o ( n n ) n! = o(n^n) n!=o(nn)
  • n ! = w ( 2 n ) n! = w(2^n) n!=w(2n)
  • l o g ( n ! ) = Θ ( n l o g n ) log(n!) = \Theta (nlogn) log(n!)=Θ(nlogn)

结果:

vaVaVavaVaVaVaVa
2 2 n 2^{2^n} 22n n ! n! n! n 2 n n2^n n2n 3 2 n {\frac {3}{2}}^n 23n ( l o g n ) l o g n = n l o g n l o g n (log n)^{logn} = n^{logn logn} (logn)logn=nlognlogn n 3 n^3 n3 l o g ( n ! ) = Θ ( n l o g n ) log(n!) = \Theta(nlogn) log(n!)=Θ(nlogn) n = Θ ( 2 l o g n ) n = \Theta(2^{logn}) n=Θ(2logn)
l o g 2 n log^2n log2n l o g n logn logn l o g n \sqrt{logn} logn l o g l o g n loglogn loglogn n 1 l o g n = Θ 1 n^{\frac {1}{logn}} = \Theta 1 nlogn1=Θ1

2. 求解递推方程,递推公式的主定理和递归树方法要熟悉。(10分)

定理1.6 主定理 a ≥ 1 , b ≥ 1 a\geq 1,b\geq1 a1,b1为常数, 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 , 那 么 T ( n ) = Θ ( n l o g b a ) 若f(n) = O (n^{log_ba-\varepsilon}),\varepsilon >0,那么T(n) = \Theta(n^{log_ba}) f(n)=O(nlogbaε),ε>0,T(n)=Θ(nlogba)
(2) 若 f ( n ) = Θ ( n l o g b a ) , , 那 么 T ( n ) = Θ ( n l o g b a l o g n ) 若f(n) = \Theta (n^{log_ba}),,那么T(n) = \Theta(n^{log_ba}logn) f(n)=Θ(nlogba),,T(n)=Θ(nlogbalogn)
(3) 若 f ( n ) = Ω ( n l o g b a + ε ) , ε > 0 , 那 么 T ( n ) = Θ ( f ( n ) ) 若f(n) = \Omega (n^{log_ba+\varepsilon}),\varepsilon >0,那么T(n) = \Theta(f(n)) f(n)=Ω(nlogba+ε),ε>0,T(n)=Θ(f(n))


例1.16:求解递推方程
T ( n ) = 9 T ( n / 3 ) + n T(n) = 9T(n/3) + n T(n)=9T(n/3)+n
解析:
由题可知,符合结构,此时 f ( n ) f(n) f(n) = n n n,满足第一种情况, ε = 1 \varepsilon = 1 ε=1
n l o g 3 9 − ε n^{log_39-\varepsilon} nlog39ε,则 T ( n ) = Θ ( n 2 ) T(n) = \Theta(n^2) T(n)=Θ(n2)


例1.17:求解递推方程
T ( n ) = T ( 2 n / 3 ) + 1 T(n) = T(2n/3) + 1 T(n)=T(2n/3)+1
解析:
由题可知: n l o g 3 / 2 1 = n 0 = 1 n^{log_{3/2}1} = n^0 =1 nlog3/21=n0=1,满足 f ( n ) = 1 f(n) = 1 f(n)=1, f ( n ) = Θ ( n l o g b a ) , f(n) = \Theta (n^{log_ba}), f(n)=Θ(nlogba),
则是 T ( n ) = Θ ( n 0 l o g n ) = Θ ( l o g n ) T(n) = \Theta(n^{0}logn)=\Theta(logn) T(n)=Θ(n0logn)=Θ(logn)


例1.18:求解递推方程
T ( n ) = 3 T ( n / 4 ) + n l o g n T(n) = 3T(n/4) + nlogn T(n)=3T(n/4)+nlogn

n l o g 4 3 + ε n^{log_4{3+\varepsilon}} nlog43+ε,满足第三种情况, n l o g n = Ω ( n l o g 4 3 + ε ) = Ω ( n l o g 4 0.793 + ε ) , 则 ε = 0.2 nlogn=\Omega(n^{log_43+\varepsilon})=\Omega(n^{log_40.793+\varepsilon}),则\varepsilon=0.2 nlogn=Ω(nlog43+ε)=Ω(nlog40.793+ε)ε=0.2,
此外,要使 a f ( n / b ) ≤ c f ( n ) af(n/b)\leq cf(n) afn/bcf(n),得到
3 n 4 l o g n 4 ≤ c n l o g n \frac{3n}{4}log\frac{n}{4} \leq cnlogn 43nlog4ncnlogn显然只要 c ≥ 3 / 4 成 立 c \geq 3/4成立 c3/4,因此有 T ( n ) = Θ ( f ( n ) ) = Θ ( n l o g n ) T(n)= \Theta (f(n)) = \Theta (nlogn) T(n)=Θ(f(n))=Θ(nlogn)


例1.19 求解递推方程
T ( n ) = 2 T ( n / 2 ) + n l o g n T(n) = 2T(n/2) + nlogn T(n)=2T(n/2)+nlogn
递归树解法:
n = 3 k n=3^k n=3k,


例1.20 求解
{ T ( n ) = 2 T ( n / 2 ) + n T ( 1 ) = 1. \left\{ \begin{matrix} T(n) = 2T(n/2) + n \\T(1)=1. \end{matrix}\right. {T(n)=2T(n/2)+nT(1)=1.


3.利用分治法设计算法(20分)或建立递推关系。


4. 二分搜索法+蛮力法应用(15分)


5. 利用动态规划法设计算法,可以参考例子3.4和习题3.1(15分)

6. 贪心算法。可以参考例子4.2(15分)

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值