情报
- 按阶递增方式排序函数,可以参考例子1.6(10分)
- 求解递推方程,递推公式的主定理和递归树方法要熟悉。(10分)
- 利用分治法设计算法(20分)或建立递推关系。
- 二分搜索法+蛮力法应用(15分)
- 利用动态规划法设计算法,可以参考例子3.4和习题3.1(15分)
- 贪心算法。可以参考例子4.2(15分)
- 关于算法基本概念的论述题(含题解和难解问题,回溯算法和分支限界算法)(15分)
细说
1.按阶递增方式排序函数,可以参考例子1.6(10分)
例1.6 下面给定一些函数,请把他们按照渐进的界从高到低的顺序进行排列.如果两个函数 f(n) 与 g(n) 的阶相等,则表示为 f(n) = Θ( g(n) )
| va | Va | Va | va | Va | Va | Va | Va |
|---|---|---|---|---|---|---|---|
| log2nlog^2 nlog2n | 111 | n!n!n! | n2n | n1/logn | (3/2)n | logn\sqrt{log n}logn | (log n)logn |
| 22n2^{2^n}22n | nloglognn^{loglogn}nloglogn | n3n^3n3 | loglognloglognloglogn | nlognnlognnlogn | nnn | 2logn2^{logn}2logn | lognlognlogn |
| log(n!)log(n!)log(n!) |
解析:
指数函数的阶高于多项式函数的阶,而多项式函数的阶高于对数函数的阶
指数函数:f(n)=rnf(n) = r^nf(n)=rn
多项式函数:f(n)=a0+a1n+a2n2+...+adndf(n) = a_0 + a_1n+a_2n^2+...+a_dn^df(n)=a0+a1n+a2n2+...+adnd
对数函数:f(n)=logbnf(n) = log_bnf(n)=logbn
阶乘函数:f(n)=n!f(n) = n!f(n)=n!
- n!=o(nn)n! = o(n^n)n!=o(nn)
- n!=w(2n)n! = w(2^n)n!=w(2n)
- log(n!)=Θ(nlogn)log(n!) = \Theta (nlogn)log(n!)=Θ(nlogn)
结果:
| va | Va | Va | va | Va | Va | Va | Va |
|---|---|---|---|---|---|---|---|
| 22n2^{2^n}22n | n!n!n! | n2nn2^nn2n | 32n{\frac {3}{2}}^n23n | (logn)logn=nlognlogn(log n)^{logn} = n^{logn logn}(logn)logn=nlognlogn | n3n^3n3 | log(n!)=Θ(nlogn)log(n!) = \Theta(nlogn)log(n!)=Θ(nlogn) | n=Θ(2logn)n = \Theta(2^{logn})n=Θ(2logn) |
| log2nlog^2nlog2n | lognlognlogn | logn\sqrt{logn}logn | loglognloglognloglogn | n1logn=Θ1n^{\frac {1}{logn}} = \Theta 1nlogn1=Θ1 |
2. 求解递推方程,递推公式的主定理和递归树方法要熟悉。(10分)
定理1.6 主定理 设a≥1,b≥1a\geq 1,b\geq1a≥1,b≥1为常数,f(n)f(n)f(n)为函数,T(n)T(n)T(n)为非负整数,且
T(n)=aT(n/b)+f(n)T(n) = aT(n/b) + f(n)T(n)=aT(n/b)+f(n)
则有以下结果:
(1)若f(n)=O(nlogba−ε),ε>0,那么T(n)=Θ(nlogba)若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)=Θ(nlogba),,那么T(n)=Θ(nlogbalogn)若f(n) = \Theta (n^{log_ba}),,那么T(n) = \Theta(n^{log_ba}logn)若f(n)=Θ(nlogba),,那么T(n)=Θ(nlogbalogn)
(3) 若f(n)=Ω(nlogba+ε),ε>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)=9T(n/3)+nT(n) = 9T(n/3) + n T(n)=9T(n/3)+n
解析:
由题可知,符合结构,此时f(n)f(n)f(n) = nnn,满足第一种情况,ε=1\varepsilon = 1ε=1
即nlog39−εn^{log_39-\varepsilon}nlog39−ε,则T(n)=Θ(n2)T(n) = \Theta(n^2)T(n)=Θ(n2)
例1.17:求解递推方程
T(n)=T(2n/3)+1T(n) = T(2n/3) + 1 T(n)=T(2n/3)+1
解析:
由题可知:nlog3/21=n0=1n^{log_{3/2}1} = n^0 =1nlog3/21=n0=1,满足f(n)=1f(n) = 1f(n)=1,f(n)=Θ(nlogba),f(n) = \Theta (n^{log_ba}),f(n)=Θ(nlogba),
则是T(n)=Θ(n0logn)=Θ(logn)T(n) = \Theta(n^{0}logn)=\Theta(logn)T(n)=Θ(n0logn)=Θ(logn)
例1.18:求解递推方程
T(n)=3T(n/4)+nlognT(n) = 3T(n/4) + nlognT(n)=3T(n/4)+nlogn
由nlog43+εn^{log_4{3+\varepsilon}}nlog43+ε,满足第三种情况,nlogn=Ω(nlog43+ε)=Ω(nlog40.793+ε),则ε=0.2nlogn=\Omega(n^{log_43+\varepsilon})=\Omega(n^{log_40.793+\varepsilon}),则\varepsilon=0.2nlogn=Ω(nlog43+ε)=Ω(nlog40.793+ε),则ε=0.2,
此外,要使af(n/b)≤cf(n)af(n/b)\leq cf(n)af(n/b)≤cf(n),得到
3n4logn4≤cnlogn\frac{3n}{4}log\frac{n}{4} \leq cnlogn43nlog4n≤cnlogn显然只要c≥3/4成立c \geq 3/4成立c≥3/4成立,因此有T(n)=Θ(f(n))=Θ(nlogn)T(n)= \Theta (f(n)) = \Theta (nlogn)T(n)=Θ(f(n))=Θ(nlogn)
例1.19 求解递推方程
T(n)=2T(n/2)+nlognT(n) = 2T(n/2) + nlognT(n)=2T(n/2)+nlogn
递归树解法:
设n=3kn=3^kn=3k,
例1.20 求解
{T(n)=2T(n/2)+nT(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.
1万+

被折叠的 条评论
为什么被折叠?



