1.18 对题目中的函数进行从高到低阶的排列:
∑ k = 1 n 1 k 为 调 和 计 数 , 刚 好 跟 题 目 中 的 l o g n 同 阶 l o g ( n ! ) 跟 题 目 中 的 n l o g n 为 同 阶 , 具 体 的 证 明 方 法 在 第 19 题 的 第 ( 8 ) 题 我 们 约 定 l o g 为 l o g 2 , 代 入 其 实 l o g 10 也 没 有 太 大 的 区 别 , 所 以 n = l o g 10 1 0 n , 在 这 题 中 n = Θ ( l o g 1 0 n ) 接 着 当 n → ∞ , l n ( l n n ) > 2 , 那 么 n l n l n n > n 2 , 而 我 们 使 用 的 不 过 是 约 定 的 l o g 函 数 , 所 以 n l o g l o g n > n 3 设 k = l n n , n l n l n n = n l n k , 取 对 数 , l n ( k ) k , 最 终 结 果 为 k k = n l n ( k ) , 根 据 这 个 道 理 , 可 以 发 现 n l o g l o g n = l o g n l o g n 结 合 以 下 的 典 型 的 时 间 复 杂 度 , 从 低 往 高 排 序 为 : o ( 1 ) 、 o ( l o g ∗ n ) 、 o ( l o g l o g n ) 、 o ( l o g n ) 、 o ( n ) 、 o ( n ) 、 o ( n l o g ∗ n ) 、 o ( n l o g l o g n ) 、 o ( n l o g n ) 、 o ( n 2 ) 、 o ( n 3 ) 、 o ( n c ) 、 o ( 2 n ) 因 此 本 题 的 答 案 为 : n ! , 2 2 n , n 2 n , ( l o g n ) l o g n = n l o g l o g n , n 3 , n l o g n = Θ ( l o g ( n ! ) ) , n = Θ ( l o g 1 0 n ) , 2 l o g n , 2 2 l o g n , ∑ k = 1 n 1 k = Θ ( l o g n ) , l o g l o g n \begin{aligned} &\sum_{k=1}^n\frac{1}{k}为调和计数,刚好跟题目中的logn同阶\\ &log(n!)跟题目中的nlogn为同阶,具体的证明方法在第19题的第(8)题\\ &我们约定log为log_2,代入其实log_{10}也没有太大的区别,\\ &所以n=log_{10}10^n,在这题中n=\Theta(log10^n)\\ &接着当n \rarr \infin, ln(lnn)>2,那么n^{lnlnn}>n^2,而我们使用的不过是约定的log函数,所以n^{loglogn}>n^3\\ &设k=lnn,n^{lnlnn}=n^{lnk},取对数,ln(k)k,最终结果为k^k=n^{ln(k)},根据这个道理,\\ &可以发现n^{loglogn}=logn^{logn}\\ &结合以下的典型的时间复杂度,从低往高排序为:\\ &o(1)、o(log* n) 、o(loglogn)、o(logn)、o(\sqrt n)、o(n)、o(nlog*n)、o(nloglogn)、o(nlogn)、o(n^2)、o(n^3)、o(n^c)、o(2^n)\\ &因此本题的答案为:\\ &n!,2^{2n},n2^n,(logn)^{logn}=n^{loglogn},n^3,nlogn=\Theta(log(n!)),n=\Theta(log10^n),2^{log\sqrt n},2^{\sqrt{2logn}},\sum_{k=1}^n\frac{1}{k}=\Theta(logn),loglogn\\ \end{aligned} k=1∑nk1为调和计数,刚好跟题目中的logn同阶log(n!)跟题目中的nlogn为同阶,具体的证明方法在第19题的第(8)题我们约定log为log2,代入其实log10也没有太大的区别,所以n=log1010n,在这题中n=Θ(log10n)接着当n→∞,ln(lnn)>2,那么nlnlnn>n2,而我们使用的不过是约定的log函数,所以nloglogn>n3设k=lnn,nlnlnn=nlnk,取对数,ln(k)k,最终结果为kk=nln(k),根据这个道理,可以发现nloglogn=lognlogn结合以下的典型的时间复杂度,从低往高排序为:o(1)、o(log∗n)、o(loglogn)、o(logn)、o(n)、o(n)、o(nlog∗n)、o(nloglogn)、o(nlogn)、o(n2)、o(n3)、o(nc)、o(2n)因此本题的答案为:n!,22n,n2n,(logn)logn=nloglogn,n3,nlogn=Θ(log(n!)),n=Θ(log10n),2logn,22logn,k=1∑nk1=Θ(logn),loglogn
1.19 求解以下的递推方程:
( 1 ) { T ( n ) = T ( n − 1 ) + n 2 T ( 1 ) = 1 (1) \begin{cases} T(n)=T(n-1)+n^2 \\ T(1)=1 \end{cases} (1){T(n)=T(n−1)+n2T(1)=1
这题使用迭代法就可以了。
T
(
n
)
=
T
(
n
−
1
)
+
n
2
=
[
T
(
n
−
2
)
+
(
n
−
1
)
2
]
+
n
2
=
[
T
(
n
−
3
)
+
(
n
−
2
)
2
]
+
(
n
−
1
)
2
+
n
2
=
…
=
T
(
1
)
+
2
2
+
3
2
+
⋯
+
(
n
−
1
)
2
+
n
2
=
1
+
2
2
+
3
2
+
⋯
+
(
n
−
1
)
2
+
n
2
设
S
=
1
2
+
2
2
+
3
2
+
⋯
+
(
n
−
1
)
2
+
n
2
∵
(
n
+
1
)
3
−
n
3
=
3
n
2
+
3
n
+
1
∴
n
3
−
(
n
−
1
)
3
=
3
(
n
−
1
)
2
+
3
(
n
−
1
)
+
1
∴
(
n
−
1
)
3
−
(
n
−
2
)
3
=
3
(
n
−
2
)
2
+
3
(
n
−
2
)
+
1
…
∴
3
3
−
2
3
=
3
×
2
2
+
3
×
2
+
1
∴
2
3
−
1
3
=
3
×
1
2
+
3
×
1
+
1
把
上
面
n
个
式
子
相
加
可
得
,
(
n
+
1
)
3
−
1
=
3
(
1
2
+
2
2
+
⋯
+
n
2
)
+
3
(
1
+
2
+
⋯
+
n
)
+
n
∴
(
n
+
1
)
3
−
1
=
3
S
+
3
n
(
n
+
1
)
2
+
n
∴
S
=
n
(
n
+
1
)
(
2
n
+
1
)
6
综
上
所
述
,
这
题
的
结
果
为
n
(
n
+
1
)
(
2
n
+
1
)
6
=
Θ
(
n
3
)
\begin{aligned} T(n)&=T(n-1)+n^2 \\ &=[T(n-2)+(n-1)^2]+n^2 \\ &=[T(n-3)+(n-2)^2]+(n-1)^2+n^2 \\ &=\dots \\ &=T(1)+2^2+3^2+\dots+(n-1)^2+n^2 \\ &=1+2^2+3^2+\dots+(n-1)^2+n^2 \\ &设S=1^2+2^2+3^2+\dots+(n-1)^2+n^2\\ &\because (n+1)^3-n^3=3n^2+3n+1\\ &\therefore n^3-(n-1)^3=3(n-1)^2+3(n-1)+1\\ &\therefore (n-1)^3-(n-2)^3=3(n-2)^2+3(n-2)+1\\ & \dots \\ &\therefore 3^3-2^3=3\times 2^2 +3\times 2 +1\\ &\therefore 2^3-1^3=3\times 1^2 +3\times 1 +1\\ &把上面n个式子相加可得,\\ &(n+1)^3-1=3(1^2+2^2+\dots+n^2)+3(1+2+\dots+n)+n\\ &\therefore (n+1)^3-1=3S+\frac{3n(n+1)}{2}+n\\ &\therefore S=\frac{n(n+1)(2n+1)}{6}\\ &综上所述,这题的结果为\frac{n(n+1)(2n+1)}{6}=\Theta(n^3)\\ \end{aligned}
T(n)=T(n−1)+n2=[T(n−2)+(n−1)2]+n2=[T(n−3)+(n−2)2]+(n−1)2+n2=…=T(1)+22+32+⋯+(n−1)2+n2=1+22+32+⋯+(n−1)2+n2设S=12+22+32+⋯+(n−1)2+n2∵(n+1)3−n3=3n2+3n+1∴n3−(n−1)3=3(n−1)2+3(n−1)+1∴(n−1)3−(n−2)3=3(n−2)2+3(n−2)+1…∴33−23=3×22+3×2+1∴23−13=3×12+3×1+1把上面n个式子相加可得,(n+1)3−1=3(12+22+⋯+n2)+3(1+2+⋯+n)+n∴(n+1)3−1=3S+23n(n+1)+n∴S=6n(n+1)(2n+1)综上所述,这题的结果为6n(n+1)(2n+1)=Θ(n3)
( 2 ) { T ( n ) = 9 T ( n 3 ) + n T ( 1 ) = 1 (2) \begin{cases} T(n)=9T(\frac{n}{3})+n \\ T(1)=1 \end{cases} (2){T(n)=9T(3n)+nT(1)=1
凭感觉,这题很明显用迭代法并不好看,可以选择递归树或主定理,这里我选用主定理,另外使用主定理需要验证。
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 2 = n 1 + 1 > n 1 这 种 情 况 符 合 主 定 理 的 内 容 的 第 一 种 情 况 , 如 下 : 设 a ≥ 1 , b > 1 为 常 数 , f ( n ) 为 函 数 , T ( n ) 为 非 负 整 数 , 且 T ( n ) = a T ( n b ) + f ( n ) , 则 1. 若 f ( n ) = O ( n l o g b a − ϵ ) , ϵ > 0 , 那 么 T ( n ) = Θ ( n l o g b a ) 其 中 ϵ = 1 , 结 果 T ( n ) = Θ ( n 2 ) \begin{aligned} &a=9,b=3,f(n)=n\\ &n^{log_39}=n^2,f(n)=O(n^{log_39-1})\\ &而我们可以知道n^2=n^{1+1}>n^1这种情况\\ &符合主定理的内容的第一种情况,如下:\\ &设a\geq 1,b>1为常数,f(n)为函数,T(n)为非负整数,且T(n)=aT(\frac{n}{b})+f(n),则\\ &1. 若f(n)=O(n^{log_ba-\epsilon}),\epsilon>0,那么T(n)=\Theta(n^{log_ba})\\ \\ &其中\epsilon =1,结果T(n)=\Theta(n^2)\\ \end{aligned} a=9,b=3,f(n)=nnlog39=n2,f(n)=O(nlog39−1)而我们可以知道n2=n1+1>n1这种情况符合主定理的内容的第一种情况,如下:设a≥1,b>1为常数,f(n)为函数,T(n)为非负整数,且T(n)=aT(bn)+f(n),则1.若f(n)=O(nlogba−ϵ),ϵ>0,那么T(n)=Θ(nlogba)其中ϵ=1,结果T(n)=Θ(n2)
( 3 ) { T ( n ) = T ( n 2 ) + T ( n 4 ) + c n , c为常数 T ( 1 ) = 1 (3) \begin{cases} T(n)=T(\frac{n}{2})+T(\frac{n}{4})+cn \text{, c为常数}\\ T(1)=1 \end{cases} (3){T(n)=T(2n)+T(4n)+cn, c为常数T(1)=1
这题根据我丰富的课堂看题经验,使用主定理验证的话,容易翻车,所以我选递归树。
T
(
n
)
=
c
n
+
3
c
n
4
+
(
3
4
)
2
c
n
+
⋯
=
Θ
(
n
)
\begin{aligned} &T(n)=cn+\frac{3cn}{4}+(\frac{3}{4})^2cn+\dots=\Theta(n)\\ \end{aligned}
T(n)=cn+43cn+(43)2cn+⋯=Θ(n)
( 4 ) { T ( n ) = T ( n − 1 ) + l o g 3 n T ( 1 ) = 1 (4) \begin{cases} T(n)=T(n-1)+log3^n \\ T(1)=1 \end{cases} (4){T(n)=T(n−1)+log3nT(1)=1
这题直接使用迭代法求就行了。
首
先
把
l
o
g
3
n
变
成
n
l
o
g
3
T
(
n
)
=
n
l
o
g
3
+
(
n
−
1
)
l
o
g
3
+
⋯
+
2
l
o
g
3
+
T
(
1
)
=
[
n
+
(
n
−
1
)
+
⋯
+
2
]
l
o
g
3
+
1
=
[
(
n
−
1
)
(
n
+
2
)
2
]
l
o
g
3
+
1
=
Θ
(
n
2
)
\begin{aligned} 首先把&log3^n变成nlog3\\ T(n) &= nlog3+(n-1)log3+ \dots +2log3+T(1) \\ &=[n+(n-1)+\dots+2]log3+1\\ &=[\frac{(n-1)(n+2)}{2}]log3+1\\ &=\Theta(n^2)\\ \end{aligned}
首先把T(n)log3n变成nlog3=nlog3+(n−1)log3+⋯+2log3+T(1)=[n+(n−1)+⋯+2]log3+1=[2(n−1)(n+2)]log3+1=Θ(n2)
(
5
)
{
T
(
n
)
=
5
T
(
n
2
)
+
(
n
l
o
g
n
)
2
T
(
1
)
=
1
(5) \begin{cases} T(n)=5T(\frac{n}{2})+(nlogn)^2 \\ T(1)=1 \end{cases}
(5){T(n)=5T(2n)+(nlogn)2T(1)=1
使用主定理会好点。
a
=
5
,
b
=
2
,
f
(
n
)
=
(
n
l
o
g
n
)
2
=
O
(
n
l
o
g
2
5
−
ϵ
)
∵
n
l
o
g
2
5
>
f
(
n
)
相
当
于
主
定
理
的
情
况
一
T
(
n
)
=
Θ
(
n
l
o
g
2
5
)
\begin{aligned} &a=5,b=2,f(n)=(nlogn)^2=O(n^{log_25-\epsilon})\\ &\because n^{log_25}>f(n)\\ &相当于主定理的情况一\\ &T(n)=\Theta(n^{log_25})\\ \end{aligned}
a=5,b=2,f(n)=(nlogn)2=O(nlog25−ϵ)∵nlog25>f(n)相当于主定理的情况一T(n)=Θ(nlog25)
( 6 ) { T ( n ) = 2 T ( n 2 ) + n 2 l o g n T ( 1 ) = 1 (6) \begin{cases} T(n)=2T(\frac{n}{2})+n^2logn \\ T(1)=1 \end{cases} (6){T(n)=2T(2n)+n2lognT(1)=1
这题使用主定理。
a
=
2
,
b
=
2
,
f
(
n
)
=
n
2
l
o
g
n
n
2
l
o
g
n
=
Ω
(
n
l
o
g
2
2
+
ϵ
)
要
使
a
f
(
n
b
)
≤
c
f
(
n
)
成
立
,
代
入
f
(
n
)
=
n
l
o
g
n
,
可
得
2
(
n
2
)
2
l
o
g
(
n
2
)
=
n
2
2
(
l
o
g
n
−
1
)
≤
n
2
2
l
o
g
n
≤
c
n
2
l
o
g
n
只
要
c
≥
3
4
,
上
式
不
等
式
对
所
有
充
分
大
的
n
成
立
,
因
此
有
T
(
n
)
=
Θ
(
f
(
n
)
)
=
Θ
(
n
2
l
o
g
n
)
\begin{aligned} &a=2,b=2,f(n)=n^2logn\\ &n^2logn=\Omega(n^{log_22+\epsilon})\\ &要使af(\frac{n}{b})\leq cf(n)成立,代入f(n)=nlogn,可得\\ &2(\frac{n}{2})^2log(\frac{n}{2})=\frac{n^2}{2}(logn-1)\\ &\leq\frac{n^2}{2}logn\\ &\leq cn^2logn\\ &只要c\geq\frac{3}{4},上式不等式对所有充分大的n成立,\\ &因此有T(n)=\Theta(f(n))=\Theta(n^2logn)\\ \end{aligned}
a=2,b=2,f(n)=n2lognn2logn=Ω(nlog22+ϵ)要使af(bn)≤cf(n)成立,代入f(n)=nlogn,可得2(2n)2log(2n)=2n2(logn−1)≤2n2logn≤cn2logn只要c≥43,上式不等式对所有充分大的n成立,因此有T(n)=Θ(f(n))=Θ(n2logn)
( 7 ) { T ( n ) = T ( n − 1 ) + 1 n T ( 1 ) = 1 (7) \begin{cases} T(n)=T(n-1)+\frac{1}{n} \\ T(1)=1 \end{cases} (7){T(n)=T(n−1)+n1T(1)=1
这题是应用迭代法就可以了,跟第一题很像。
T
(
n
)
=
T
(
n
−
1
)
+
1
n
=
…
=
1
n
+
1
n
−
1
+
⋯
+
1
2
+
T
(
1
)
=
1
1
+
1
2
+
⋯
+
1
n
很
明
显
这
是
调
和
级
数
∑
k
=
1
n
1
k
=
l
n
(
n
)
+
O
(
1
)
=
Θ
(
l
o
g
n
)
\begin{aligned} T(n)&=T(n-1)+\frac{1}{n}\\ &=\dots\\ &=\frac{1}{n}+\frac{1}{n-1}+\dots+\frac{1}{2}+T(1)\\ &=\frac{1}{1}+\frac{1}{2}+\dots+\frac{1}{n}\\ 很明显&这是调和级数\\ &\sum_{k=1}^n\frac{1}{k}=ln(n)+O(1)=\Theta(logn)\\ \end{aligned}
T(n)很明显=T(n−1)+n1=…=n1+n−11+⋯+21+T(1)=11+21+⋯+n1这是调和级数k=1∑nk1=ln(n)+O(1)=Θ(logn)
(
8
)
T
(
n
)
=
T
(
n
−
1
)
+
l
o
g
n
,估计T(n)的阶
(8) \begin{aligned} T(n)=T(n-1)+logn \text{,估计T(n)的阶} \\ \end{aligned}
(8)T(n)=T(n−1)+logn,估计T(n)的阶
这题使用迭代法去求。
T
(
n
)
=
l
o
g
n
+
l
o
g
(
n
−
1
)
+
⋯
+
l
o
g
2
+
T
(
1
)
=
l
o
g
(
n
!
)
+
T
(
1
)
题
目
的
问
题
变
成
了
l
o
g
(
n
!
)
到
底
跟
什
么
同
阶
或
有
什
么
低
阶
或
高
阶
的
函
数
。
使
用
放
大
法
:
l
o
g
(
n
!
)
=
∑
k
=
1
n
l
o
g
(
k
)
≤
∑
k
=
1
n
l
o
g
(
n
)
=
l
o
g
(
n
)
+
l
o
g
(
n
)
+
⋯
+
l
o
g
(
n
)
=
n
l
o
g
(
n
)
=
O
(
n
l
o
g
n
)
∵
n
!
≥
(
n
2
)
n
2
∴
l
o
g
(
n
!
)
≥
l
o
g
(
n
2
)
n
2
=
n
2
l
o
g
(
n
2
)
=
n
2
l
o
g
n
−
n
2
l
o
g
2
当
n
≥
4
时
:
n
2
l
o
g
2
=
1
4
l
o
g
4
≤
1
4
n
l
o
g
n
有
:
l
o
g
(
n
!
)
≥
n
2
l
o
g
n
−
n
2
l
o
g
2
≥
n
2
−
1
4
n
l
o
g
n
=
1
4
n
l
o
g
n
=
Ω
(
n
l
o
g
n
)
∴
l
o
g
(
n
!
)
=
Θ
(
n
l
o
g
n
)
\begin{aligned} T(n)&=logn+log(n-1)+\dots+log2+T(1)\\ &=log(n!)+T(1)\\ &题目的问题变成了log(n!)到底跟什么同阶或有什么低阶或高阶的函数。\\ &使用放大法:\\ log(n!)&=\sum_{k=1}^nlog(k)\\ &\leq\sum_{k=1}^nlog(n)\\ &=log(n)+log(n)+\dots+log(n)\\ &=nlog(n)\\ &=O(nlogn)\\ \because n!\geq&(\frac{n}{2})^{\frac{n}{2}}\\ \therefore log(n!)&\geq log(\frac{n}{2})^{\frac{n}{2}}\\ &=\frac{n}{2}log(\frac{n}{2})\\ &=\frac{n}{2}logn-\frac{n}{2}log2\\ 当n\geq&4时:\\ &\frac{n}{2}log2=\frac{1}{4}log4\leq \frac{1}{4}nlogn\\ 有:&\\ log(n!)\geq&\frac{n}{2}logn-\frac{n}{2}log2\\ &\geq \frac{n}{2}-\frac{1}{4}nlogn\\ &=\frac{1}{4}nlogn\\ &=\Omega(nlogn)\\ &\therefore log(n!)=\Theta(nlogn)\\ \end{aligned}
T(n)log(n!)∵n!≥∴log(n!)当n≥有:log(n!)≥=logn+log(n−1)+⋯+log2+T(1)=log(n!)+T(1)题目的问题变成了log(n!)到底跟什么同阶或有什么低阶或高阶的函数。使用放大法:=k=1∑nlog(k)≤k=1∑nlog(n)=log(n)+log(n)+⋯+log(n)=nlog(n)=O(nlogn)(2n)2n≥log(2n)2n=2nlog(2n)=2nlogn−2nlog24时:2nlog2=41log4≤41nlogn2nlogn−2nlog2≥2n−41nlogn=41nlogn=Ω(nlogn)∴log(n!)=Θ(nlogn)
参考链接:
https://zhuanlan.zhihu.com/p/415253994