情报
- 按阶递增方式排序函数,可以参考例子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 |
---|---|---|---|---|---|---|---|
l o g 2 n log^2 n log2n | 1 1 1 | n ! n! n! | n2n | n1/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)
结果:
va | Va | Va | va | Va | Va | Va | Va |
---|---|---|---|---|---|---|---|
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
a≥1,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
,
那
么
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)
af(n/b)≤cf(n),得到
3
n
4
l
o
g
n
4
≤
c
n
l
o
g
n
\frac{3n}{4}log\frac{n}{4} \leq cnlogn
43nlog4n≤cnlogn显然只要
c
≥
3
/
4
成
立
c \geq 3/4成立
c≥3/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.