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

本文详细探讨了算法分析的基础知识,包括插入排序的时间代价分析,介绍了最佳和最坏情况下的运行时间,并引入了Θ记号来表示算法的时间复杂度。通过一系列的证明和练习题,阐述了Θ记号的使用以及渐进函数的相关性质。
摘要由CSDN通过智能技术生成

基础知识

算法分析

我们先来求解一个排序问题:

输入: n n n个数的一个序列 ⟨ a 1 , a 2 , ⋯   , a n ⟩ \langle a_1,a_2,\cdots,a_n\rangle a1,a2,,an

输出: 输入序列的一个排列 ⟨ a 1 ′ , a 2 ′ , ⋯   , a n ′ ⟩ \langle a_1',a_2',\cdots,a_n'\rangle a1,a2,,an,满足 a 1 ′ ≤ a 2 ′ ≤ ⋯ a n ′ a_1'\leq a_2'\leq \cdots a_n' a1a2an

插入排序的算法伪代码如下:

for j = 2 j=2 j=2 to j j j. l e n g t h length length

  • k e y = A key=A key=A[ j j j]
  • // Insert A A A[ j j j] into the sorted sequence A A A[ 1.. j − 1 1..j-1 1..j1]
  • i = j − 1 i=j-1 i=j1
  • while i > 0 i>0 i>0 and A A A[ i i i] > k e y >key >key
    • A [ i + 1 ] = A [ i ] A[i+1]=A[i] A[i+1]=A[i]
    • i = i − 1 i=i-1 i=i1
  • A [ i + 1 ] = k e y A[i+1]=key A[i+1]=key

为分析这个算法的时间代价,我们假定第 i i i行所需的时间代价为 c i c_i ci。我们首先给出这个过程中每条语句的执行时间和执行次数。其中, t j t_j tj表示对于特定的 j j j执行while循环的次数。

伪代码代价次数
for j = 2 j=2 j=2 to j j j. l e n g t h length length c 1 c_1 c1 n n n
k e y = A key=A key=A[ j j j] c 2 c_2 c2 n − 1 n-1 n1
// Insert A A A[ j j j] into the sorted sequence A A A[ 1.. j − 1 1..j-1 1..j1] 0 0 0 n − 1 n-1 n1
i = j − 1 i=j-1 i=j1 c 4 c_4 c4 n − 1 n-1 n1
while i > 0 i>0 i>0 and A A A[i] > k e y >key >key c 5 c_5 c5 ∑ j = 2 n t j \sum_{j=2}^n t_j j=2ntj
A [ i + 1 ] = A [ i ] A[i+1]=A[i] A[i+1]=A[i] c 6 c_6 c6 ∑ j = 2 n ( t j − 1 ) \sum_{j=2}^n (t_j-1) j=2n(tj1)
i = i − 1 i=i-1 i=i1 c 7 c_7 c7 ∑ j = 2 n ( t j − 1 ) \sum_{j=2}^n (t_j-1) j=2n(tj1)
A [ i + 1 ] = k e y A[i+1]=key A[i+1]=key c 8 c_8 c8 n − 1 n-1 n1

总运行时间 T ( n ) T(n) T(n)为代价与次数之积求和,得:

T ( n ) = c 1 n + c 2 ( n − 1 ) + c 4 ( n − 1 ) + c 5 ∑ j = 2 n t j + c 6 ∑ j = 2 n ( t j − 1 ) + c 7 ∑ j = 2 n ( t j − 1 ) + c 8 ( n − 1 ) T(n)=c_1 n+c_2 (n-1)+c_4 (n-1)+c_5 \sum_{j=2}^n t_j +c_6\sum_{j=2}^n (t_j-1)+c_7\sum_{j=2}^n (t_j-1)+c_8(n-1) T(n)=c1n+c2(n1)+c4(n1)+c5j=2ntj+c6j=2n(tj1)+c7j=2n(tj1)+c8(n1)

当输入的数组已排好序时,则出现最佳情况,此时 t j = 1 t_j=1 tj=1。从而

T ( n ) = c 1 n + c 2 ( n − 1 ) + c 4 ( n − 1 ) + c 5 ( n − 1 ) + c 8 ( n − 1 ) = ( c 1 + c 2 + c 4 + c 5 + c 8 ) n − ( c 2 + c 4 + c 5 + c 8 ) \begin{aligned} T(n) & = c_1 n+c_2(n-1)+c_4(n-1)+c_5(n-1)+c_8(n-1)\\ & = (c_1+c_2+c_4+c_5+c_8)n-(c_2+c_4+c_5+c_8) \end{aligned} T(n)=c1n+c2(n1)+c4(n1)+c5(n1)+c8(n1)=(c1+c2+c4+c5+c8)n(c2+c4+c5+c8)

可将该运行时间表示为 a n + b an+b an+b,因此,它是 n n n线性函数

当输入的数组已反向排序时,则出现最坏情况。此时, t j = j t_j=j tj=j。利用以下公式:

∑ j = 2 n j = n ( n + 1 ) 2 − 1 ∑ j = 2 n ( j − 1 ) = n ( n − 1 ) 2 \sum_{j=2}^n j=\frac{n(n+1)}{2}-1\\ \sum_{j=2}^n (j-1)=\frac{n(n-1)}{2} j=2nj=2n(n+1)1j=2n(j1)=2n(n1)

可得

T ( n ) = c 1 n + c 2 ( n − 1 ) + c 4 ( n − 1 ) + c 5 ( n ( n + 1 ) 2 − 1 ) + c 6 ( n ( n − 1 ) 2 ) + c 7 ( n ( n − 1 ) 2 ) + c 8 ( n − 1 ) = ( c 5 + c 6 + c 7 2 ) n 2 + ( c 1 + c 2 + c 4 + c 5 − c 6 − c 7 2 + c 8 ) n − ( c 2 + c 4 + c 5 + c 8 ) \begin{aligned} T(n) &= c_1 n+c_2(n-1)+c_4(n-1)+c_5(\frac{n(n+1)}{2}-1)+c_6(\frac{n(n-1)}{2})+c_7(\frac{n(n-1)}{2})+c_8(n-1)\\ &=(\frac{c_5+c_6+c_7}{2})n^2+(c_1+c_2+c_4+\frac{c_5-c_6-c_7}{2}+c_8)n-(c_2+c_4+c_5+c_8) \end{aligned} T(n)=c1n+c2(n1)+c4(n1)+c5(2n(n+1)1)+c6(2n(n1))+c7(2n(n1))+c8(n1)=(2c5+c6+c7)n2+(c1+c2+c4+2c5c6c7+c8)n(c2+c4+c5+c8)

可将该运行时间表示为 a n 2 + b n + c an^2+bn+c an2+bn+c,因此,它是 n n n二次函数

当忽略低阶项 b n + c bn+c bn+c和常量系数 a a a时,只剩下因子 n 2 n^2 n2,记为 Θ ( n 2 ) \Theta(n^2) Θ(n2)


Θ \Theta Θ记号

我们使用 Θ ( g ( n ) ) \Theta(g(n)) Θ(g(n))表示以下函数的集合:

Θ ( g ( n ) ) = { f ( n ) : 存 在 正 常 量 c 1 、 c 2 和 n 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ c 1 g ( n ) ≤ f ( n ) ≤ c 2 g ( n ) } \Theta(g(n))=\lbrace f(n):存在正常量c_1、c_2和n_0,使得对所有n\geq n_0,有0\leq c_1 g(n) \leq f(n) \leq c_2 g(n) \rbrace Θ(g(n))={f(n):c1c2n0使nn00c1g(n)f(n)c2g(n)}

因为 Θ ( g ( n ) ) \Theta(g(n)) Θ(g(n))是一个集合,所以可以记“ f ( n ) ∈ Θ ( g ( n ) ) f(n)\in \Theta(g(n)) f(n)Θ(g(n))”。但是,我们通常记 f ( n ) = Θ ( g ( n ) ) f(n)=\Theta(g(n)) f(n)=Θ(g(n))以表达相同的概念。

练习

3.1-1 假设 f ( n ) f(n) f(n) g ( n ) g(n) g(n)都是渐进非负函数(当 n n n足够大时非负的函数)。使用 Θ \Theta Θ记号的基本定义来证明 max ⁡ ( f ( n ) , g ( n ) ) = Θ ( f ( n ) + g ( n ) ) \max(f(n),g(n))=\Theta(f(n)+g(n)) max(f(n),g(n))=Θ(f(n)+g(n))

证明: 根据 Θ \Theta Θ记号的基本定义,要找到 c 1 c_1 c1使得 c 1 ( f ( n ) + g ( n ) ) ≤ max ⁡ ( f ( n ) , g ( n ) ) c_1 (f(n)+g(n)) \leq \max(f(n),g(n)) c1(f(n)+g(n))max(f(n),g(n))

不妨设 n n n足够大时, f ( n ) ≤ g ( n ) f(n)\leq g(n) f(n)g(n),则将不等式放缩得到 c 1 ( f ( n ) + g ( n ) ) ≤ c 1 ( g ( n ) + g ( n ) ) ≤ max ⁡ ( f ( n ) , g ( n ) ) c_1 (f(n)+g(n)) \leq c_1 (g(n)+g(n)) \leq \max(f(n),g(n)) c1(f(n)+g(n))c1(g(n)+g(n))max(f(n),g(n)),即

2 c 1 g ( n ) ≤ max ⁡ ( f ( n ) , g ( n ) ) 2c_1 g(n) \leq \max(f(n),g(n)) 2c1g(n)max(f(n),g(n))

又根据 max ⁡ \max max的定义,

g ( n ) ≤ max ⁡ ( f ( n ) , g ( n ) ) g(n) \leq \max(f(n),g(n)) g(n)max(f(n),g(n))

所以取

c 1 = 1 2 c_1=\frac{1}{2} c1=21

即可。

根据 Θ \Theta Θ记号的基本定义,要找到 c 2 c_2 c2使得 max ⁡ ( f ( n ) , g ( n ) ) ≤ c 2 ( f ( n ) + g ( n ) ) \max(f(n),g(n)) \leq c_2 (f(n)+g(n)) max(f(n),g(n))c2(f(n)+g(n))。显然,

max ⁡ ( f ( n ) , g ( n ) ) ≤ f ( n ) + g ( n ) \max(f(n),g(n)) \leq f(n)+g(n) max(f(n),g(n))f(n)+g(n)

所以取

c 2 = 1 c_2=1 c2=1

即可。

3.1-2 求证:对任意实常量 a a a b b b,其中 b > 0 b>0 b>0,有

( n + a ) b = Θ ( n b ) (n+a)^b=\Theta(n^b) (n+a)b=Θ(nb)

证明: n n n足够大时,

c 1 n b ≤ ( n + a ) b c 1 ≤ ( n + a n ) b c 1 ≤ ( 1 + a n ) b \begin{aligned} c_1n^b & \leq (n+a)^b \\ c_1 & \leq (\frac{n+a}{n})^b\\ c_1 & \leq (1+\frac{a}{n})^b \end{aligned} c1nbc1c1(n+a)b(nn+a)b(1+na)b

所以取

c 1 = { 1 ( a ≥ 0 ) ( 1 + a n 0 ) b ( a &lt; 0 , n 0 为 正 整 数 且 a n 0 &lt; 1 ) c_1=\left. \begin{cases} 1 &amp; (a\geq 0) \\ (1+\frac{a}{n_0})^b &amp; (a&lt;0,n_0为正整数且\frac{a}{n_0}&lt;1)\\ \end{cases} \right. c1={1(1+n0a)b(a0)(a<0n0n0a<1)

即可。

c 2 n b ≥ ( n + a ) b c 2 ≥ ( n + a n ) b c 2 ≥ ( 1 + a n ) b \begin{aligned} c_2n^b &amp; \geq (n+a)^b \\ c_2 &amp; \geq (\frac{n+a}{n})^b\\ c_2 &amp; \geq (1+\frac{a}{n})^b \end{aligned} c2nbc2c2(n+a)b(nn+a)b(1+na)b

所以取

c 2 = { ( 1 + a ) b ( a ≥ 0 ) 1 ( a &lt; 0 ) c_2=\left. \begin{cases} (1+a)^b &amp; (a\geq0)\\ 1&amp;(a&lt;0) \end{cases}\right. c2={(1+a)b1(a0)(a<0)

即可。

3.1-4 2 n + 1 = O ( 2 n ) 2^{n+1}=O(2^n) 2n+1=O(2n)成立吗? 2 2 n = O ( 2 n ) 2^{2n}=O(2^n) 22n=O(2n)成立吗?其中,

O ( g ( n ) ) = { f ( n ) : 存 在 正 常 量 c 和 n 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ f ( n ) ≤ c g ( n ) } O(g(n))=\lbrace f(n):存在正常量c和n_0,使得对所有n\geq n_0,有0\leq f(n) \leq c g(n) \rbrace O(g(n))={f(n):cn0使nn00f(n)cg(n)}

解: 2 n + 1 = 2 × 2 n = O ( 2 n ) 2^{n+1}=2\times2^n= O(2^n) 2n+1=2×2n=O(2n)成立。

2 2 n = 2 n × 2 n 2^{2n}=2^n\times2^n 22n=2n×2n,对于任意常数 c c c,总存在 N N N,当 n &gt; N n&gt;N n>N时,有 2 n &gt; c 2^n&gt;c 2n>c,从而 2 2 n = 2 n × 2 n &gt; c × 2 n 2^{2n}=2^n\times 2^n&gt;c\times 2^n 22n=2n×2n>c×2n。因此不成立。

3.2-1 求证:若 f ( n ) f(n) f(n) g ( n ) g(n) g(n)是单调递增的函数,则函数 f ( n ) + g ( n ) f(n)+g(n) f(n)+g(n) f ( g ( n ) ) f(g(n)) f(g(n))也是单调递增的。此外,若 f ( n ) f(n) f(n) g ( n ) g(n) g(n)是非负的,则 f ( n ) ⋅ g ( n ) f(n)\cdot g(n) f(n)g(n)是单调递增的。

证明: n 1 &gt; n 2 n_1&gt;n_2 n1>n2,则

f ( n 1 ) + g ( n 1 ) &gt; f ( n 2 ) + g ( n 1 ) &gt; f ( n 2 ) + g ( n 2 ) f(n_1)+g(n_1)&gt;f(n_2)+g(n_1)&gt;f(n_2)+g(n_2) f(n1)+g(n1)>f(n2)+g(n1)>f(n2)+g(n2)

g ( n 1 ) &gt; g ( n 2 ) ⇒ f ( g ( n 1 ) ) &gt; f ( g ( n 2 ) ) g(n_1)&gt;g(n_2)\Rightarrow f(g(n_1))&gt;f(g(n_2)) g(n1)>g(n2)f(g(n1))>f(g(n2))

f ( n 1 ) ⋅ g ( n 1 ) &gt; f ( n 2 ) ⋅ g ( n 1 ) &gt; f ( n 2 ) ⋅ g ( n 2 ) f(n_1)\cdot g(n_1)&gt;f(n_2)\cdot g(n_1)&gt;f(n_2)\cdot g(n_2) f(n1)g(n1)>f(n2)g(n1)>f(n2)g(n2)

3.2-2 求证: a log ⁡ b c = c l o g b a a^{\log_b c}=c^{log_b a} alogbc=clogba

证明: a log ⁡ b c = a l o g a c l o g a b = c 1 l o g a b = c l o g b a a^{\log_b c}=a^{\frac{log_a c}{log_a b}}=c^{\frac{1}{log_a b}}=c^{log_b a} alogbc=alogablogac=clogab1=clogba

3.2-3(1) 求证: lg ⁡ ( n ! ) = Θ ( n lg ⁡ n ) \lg(n!)=\Theta(n\lg n) lg(n!)=Θ(nlgn)

斯特劳林公式: n ! = 2 π n ( n e ) n ( 1 + Θ ( 1 n ) ) n!=\sqrt{2\pi n}(\frac{n}{\mathrm{e}})^n(1+\Theta(\frac{1}{n})) n!=2πn (en)n(1+Θ(n1))

证明: 如下

lg ⁡ ( n ! ) = lg ⁡ ( 2 π n ( n e ) n ( 1 + Θ ( 1 n ) ) ) = 1 2 lg ⁡ ( 2 π ) − lg ⁡ e ⋅ n + ( 1 2 + n ) lg ⁡ n + lg ⁡ ( 1 + Θ ( 1 n ) ) \begin{aligned} \lg(n!)&amp;=\lg(\sqrt{2\pi n}(\frac{n}{\mathrm{e}})^n(1+\Theta(\frac{1}{n})))\\ &amp;=\frac{1}{2}\lg(2\pi)-\lg \mathrm{e}\cdot n+(\frac{1}{2}+n)\lg n+\lg(1+\Theta(\frac{1}{n})) \end{aligned} lg(n!)=lg(2πn (en)n(1+Θ(n1)))=21lg(2π)lgen+(21+n)lgn+lg(1+Θ(n1))

其中最高阶项为 n lg ⁡ n n\lg n nlgn,因此 lg ⁡ ( n ! ) = Θ ( n lg ⁡ n ) \lg(n!)=\Theta(n\lg n) lg(n!)=Θ(nlgn)

3.2-3(2) 求证: n ! = ω ( 2 n ) n!=\omega(2^n) n!=ω(2n),其中,

ω ( g ( n ) ) = { f ( n ) : 对 任 意 正 常 量 c &gt; 0 , 存 在 常 量 n 0 &gt; 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ c g ( n ) &lt; f ( n ) } \omega(g(n))=\lbrace f(n):对任意正常量c&gt;0,存在常量n_0&gt;0,使得对所有n\geq n_0,有0\leq c g(n) &lt; f(n) \rbrace ω(g(n))={f(n):c>0n0>0使nn00cg(n)<f(n)}

证明: 如下。

n ! = 1 × 2 × 3 × 4 × ⋯ × n c ⋅ 2 n = 2 × 2 × 2 × 2 × ⋯ × 2 × c \begin{aligned} n!&amp;=1\times 2\times 3\times 4 \times \cdots \times n\\ c\cdot 2^n &amp;=2\times 2\times 2\times 2\times \cdots \times 2\times c \end{aligned} n!c2n=1×2×3×4××n=2×2×2×2××2×c

n &gt; max ⁡ { 4 , c 2 } n&gt;\max\lbrace4,c^2\rbrace n>max{4,c2},此时,

n ! = 24 × ⋯ × n &gt; 24 × ⋯ × max ⁡ { 2 , c } × max ⁡ { 2 , c } c ⋅ 2 n = 16 × ⋯ × 2 × c \begin{aligned} n!&amp;=24 \times \cdots \times n\\ &amp;&gt;24 \times \cdots \times \max\lbrace2, c\rbrace \times \max\lbrace2, c\rbrace\\ c\cdot 2^n &amp;=16\times \cdots \times 2\times c \end{aligned} n!c2n=24××n>24××max{2,c}×max{2,c}=16××2×c

上式中, n ! n! n!的每一项因子均大于 c ⋅ 2 n c\cdot 2^n c2n的因子,因此 n ! &gt; c ⋅ 2 n n!&gt;c\cdot 2^n n!>c2n

3.2-3(3) 求证: n ! = o ( n n ) n!=o(n^n) n!=o(nn),其中,

o ( g ( n ) ) = { f ( n ) : 对 任 意 正 常 量 c &gt; 0 , 存 在 常 量 n 0 &gt; 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ f ( n ) &lt; c g ( n ) } o(g(n))=\lbrace f(n):对任意正常量c&gt;0,存在常量n_0&gt;0,使得对所有n\geq n_0,有0\leq f(n) &lt; c g(n) \rbrace o(g(n))={f(n):c>0n0>0使nn00f(n)<cg(n)}

证明: 不妨设 c &lt; 1 c&lt;1 c<1,取 n &gt; 1 c n&gt;\frac{1}{c} n>c1,此时,

n ! = 1 × 2 × 3 × 4 × ⋯ × n = n × 2 × 3 × 4 × ⋯ × 1 c ⋅ n n = n × n × n × n × ⋯ × n × c &gt; n × n × n × n × ⋯ × 1 \begin{aligned} n!&amp;=1\times 2\times 3\times 4 \times \cdots \times n\\ &amp;=n\times 2\times 3\times 4\times \cdots\times 1 \\ c\cdot n^n &amp;=n\times n\times n\times n\times \cdots \times n\times c\\ &amp;&gt;n\times n\times n\times n\times \cdots \times 1 \end{aligned} n!cnn=1×2×3×4××n=n×2×3×4××1=n×n×n×n××n×c>n×n×n×n××1

上式中, n ! n! n!的每一项因子均小于 c ⋅ n n c\cdot n^n cnn的因子,因此 n ! &lt; c ⋅ n n n!&lt;c\cdot n^n n!<cnn

3.2-4(1) 函数 ⌈ lg ⁡ n ⌉ ! \lceil\lg n\rceil! lgn!多项式有界吗?已知:

n ! = 2 π n ( n e ) n ( 1 + Θ ( 1 n ) ) n!=\sqrt{2\pi n}(\frac{n}{\mathrm{e}})^n(1+\Theta(\frac{1}{n})) n!=2πn (en)n(1+Θ(n1))

解: 如下。

⌈ lg ⁡ n ⌉ ! = 2 π ⌈ lg ⁡ n ⌉ ( ⌈ lg ⁡ n ⌉ e ) ⌈ lg ⁡ n ⌉ ( 1 + Θ ( 1 ⌈ lg ⁡ n ⌉ ) ) ≥ 2 π lg ⁡ n ( lg ⁡ n e ) lg ⁡ n ≥ ( lg ⁡ n e ) lg ⁡ n = e lg ⁡ n ln ⁡ ( lg ⁡ n e ) &gt; e ln ⁡ n ln ⁡ ( lg ⁡ n e ) = n ln ⁡ ( lg ⁡ n e ) \begin{aligned} \lceil\lg n\rceil!&amp;=\sqrt{2\pi \lceil\lg n\rceil}(\frac{\lceil\lg n\rceil}{\mathrm{e}})^{\lceil\lg n\rceil}(1+\Theta(\frac{1}{\lceil\lg n\rceil}))\\ &amp;\geq\sqrt{2\pi \lg n}(\frac{\lg n}{\mathrm{e}})^{\lg n}\\ &amp;\geq(\frac{\lg n}{\mathrm{e}})^{\lg n}\\ &amp;=\mathrm{e}^{\lg n\ln(\frac{\lg n}{\mathrm{e}})}\\ &amp;&gt;\mathrm{e}^{\ln n\ln(\frac{\lg n}{\mathrm{e}})}\\ &amp;=n^{\ln(\frac{\lg n}{\mathrm{e}})} \end{aligned} lgn!=2πlgn (elgn)lgn(1+Θ(lgn1))2πlgn (elgn)lgn(elgn)lgn=elgnln(elgn)>elnnln(elgn)=nln(elgn)

若对于任意正常数 c , k c,k c,k,有足够大的 n n n使得 f ( n ) ≤ c n k f(n)\leq cn^k f(n)cnk,则

lg ⁡ f ( n ) ≤ lg ⁡ c + k lg ⁡ n = O ( lg ⁡ n ) \begin{aligned} \lg f(n)&amp;\leq \lg c+k\lg n\\ &amp;=O(\lg n) \end{aligned} lgf(n)lgc+klgn=O(lgn)

lg ⁡ ( n ln ⁡ ( lg ⁡ n e ) ) = ln ⁡ ( lg ⁡ n e ) lg ⁡ n = ω ( lg ⁡ n ) \lg(n^{\ln(\frac{\lg n}{\mathrm{e}})})=\ln(\frac{\lg n}{\mathrm{e}})\lg n=\omega(\lg n) lg(nln(elgn))=ln(elgn)lgn=ω(lgn)

所以函数 ⌈ lg ⁡ n ⌉ ! \lceil\lg n\rceil! lgn!多项式无界。

3.2-4(2) 函数 ⌈ lg ⁡ lg ⁡ n ⌉ ! \lceil\lg\lg n\rceil! lglgn!多项式有界吗?已知:

n ! = 2 π n ( n e ) n ( 1 + Θ ( 1 n ) ) n!=\sqrt{2\pi n}(\frac{n}{\mathrm{e}})^n(1+\Theta(\frac{1}{n})) n!=2πn (en)n(1+Θ(n1))

解: 如下。

⌈ lg ⁡ lg ⁡ n ⌉ ! = 2 π ⌈ lg ⁡ lg ⁡ n ⌉ ( ⌈ lg ⁡ lg ⁡ n ⌉ e ) ⌈ lg ⁡ lg ⁡ n ⌉ ( 1 + Θ ( 1 ⌈ lg ⁡ lg ⁡ n ⌉ ) ) ≤ 2 π ( lg ⁡ lg ⁡ n + 1 ) ( ( lg ⁡ lg ⁡ n + 1 ) e ) ( lg ⁡ lg ⁡ n + 1 ) × 2 \begin{aligned} \lceil\lg\lg n\rceil!&amp;=\sqrt{2\pi \lceil\lg\lg n\rceil}(\frac{\lceil\lg\lg n\rceil}{\mathrm{e}})^{\lceil\lg\lg n\rceil}(1+\Theta(\frac{1}{\lceil\lg\lg n\rceil}))\\ &amp;\leq\sqrt{2\pi (\lg\lg n+1)}(\frac{(\lg\lg n+1)}{\mathrm{e}})^{(\lg\lg n+1)}\times 2\\ \end{aligned} lglgn!=2πlglgn (elglgn)lglgn(1+Θ(lglgn1))2π(lglgn+1) (e(lglgn+1))(lglgn+1)×2

lg ⁡ ( ⌈ lg ⁡ lg ⁡ n ⌉ ! ) ≤ lg ⁡ 2 + lg ⁡ 2 π ( lg ⁡ lg ⁡ n + 1 ) + ( lg ⁡ lg ⁡ n + 1 ) ( lg ⁡ ( lg ⁡ lg ⁡ n + 1 ) − lg ⁡ e ) = O ( lg ⁡ lg ⁡ n ⋅ lg ⁡ lg ⁡ lg ⁡ n ) = o ( lg ⁡ lg ⁡ n ⋅ lg ⁡ lg ⁡ n ) = o ( lg ⁡ 2 lg ⁡ n ) = o ( lg ⁡ n ) = o ( n ) \begin{aligned} \lg(\lceil\lg\lg n\rceil!)&amp;\leq \lg2+\lg\sqrt{2\pi (\lg\lg n+1)}+(\lg\lg n+1)(\lg(\lg\lg n+1)-\lg \mathrm{e})\\ &amp;=O(\lg\lg n\cdot \lg\lg\lg n)\\ &amp;=o(\lg\lg n\cdot \lg\lg n)\\ &amp;=o(\lg^2\lg n)\\ &amp;=o(\lg n)\\ &amp;=o(n) \end{aligned} lg(lglgn!)lg2+lg2π(lglgn+1) +(lglgn+1)(lg(lglgn+1)lge)=O(lglgnlglglgn)=o(lglgnlglgn)=o(lg2lgn)=o(lgn)=o(n)

因此函数 ⌈ lg ⁡ lg ⁡ n ⌉ ! \lceil\lg\lg n\rceil! lglgn!多项式有界。

3.2-5 如下两个函数中,哪一个渐进更大些: lg ⁡ ( lg ⁡ ∗ n ) \lg(\lg^* n) lg(lgn)还是 lg ⁡ ∗ ( lg ⁡ n ) \lg^* (\lg n) lg(lgn)

解: 如下。

lg ⁡ ∗ ( lg ⁡ n ) = lg ⁡ ∗ n − 1 = Θ ( lg ⁡ ∗ n ) = ω ( lg ⁡ ( lg ⁡ ∗ n ) ) \lg^* (\lg n)=\lg^* n-1=\Theta(\lg^* n)=\omega(\lg(\lg^* n)) lg(lgn)=lgn1=Θ(lgn)=ω(lg(lgn))

因此 lg ⁡ ∗ ( lg ⁡ n ) \lg^* (\lg n) lg(lgn)渐进更大些。

3.2-7 用归纳法证明:第 i i i个斐波那契数满足等式

F i = ϕ i − ϕ ^ i 5 F_i=\frac{\phi^i - \hat{\phi}^i}{\sqrt{5}} Fi=5 ϕiϕ^i

其中 ϕ \phi ϕ是黄金分割率且 ϕ ^ \hat{\phi} ϕ^是其共轭数。

解: 先验证第1、2个斐波那契数满足等式。

F 1 = ϕ − ϕ ^ 5 = 5 5 = 1 F 2 = ϕ 2 − ϕ ^ 2 5 = 1 + 2 5 + 5 4 − 1 − 2 5 + 5 4 5 = 1 \begin{aligned} F_1&amp;=\frac{\phi - \hat{\phi}}{\sqrt{5}}=\frac{\sqrt{5}}{\sqrt{5}}=1\\ F_2&amp;=\frac{\phi^2 - \hat{\phi}^2}{\sqrt{5}}=\frac{\frac{1+2\sqrt{5}+5}{4}-\frac{1-2\sqrt{5}+5}{4}}{\sqrt{5}}=1 \end{aligned} F1F2=5 ϕϕ^=5 5 =1=5 ϕ2ϕ^2=5 41+25 +54125 +5=1

F i − 2 F_{i-2} Fi2 F i − 1 F_{i-1} Fi1满足等式,则

F i = F i − 2 + F i − 1 = ϕ i − 2 − ϕ ^ i − 2 5 + ϕ i − 1 − ϕ ^ i − 1 5 = ϕ i − 2 ( ϕ + 1 ) − ϕ ^ i − 2 ( ϕ ^ + 1 ) 5 = ϕ i − 2 ϕ 2 − ϕ ^ i − 2 ϕ ^ 2 5 = ϕ i − ϕ ^ i 5 \begin{aligned} F_i&amp;=F_{i-2}+F_{i-1}\\ &amp;=\frac{\phi^{i-2} - \hat{\phi}^{i-2}}{\sqrt{5}}+\frac{\phi^{i-1} - \hat{\phi}^{i-1}}{\sqrt{5}}\\ &amp;=\frac{\phi^{i-2}(\phi+1)-\hat{\phi}^{i-2}(\hat{\phi}+1)}{\sqrt{5}}\\ &amp;=\frac{\phi^{i-2}\phi^2-\hat{\phi}^{i-2}\hat{\phi}^2}{\sqrt{5}}\\ &amp;=\frac{\phi^i-\hat{\phi}^i}{\sqrt{5}} \end{aligned} Fi=Fi2+Fi1=5 ϕi2ϕ^i2+5 ϕi1ϕ^i1=5 ϕi2(ϕ+1)ϕ^i2(ϕ^+1)=5 ϕi2ϕ2ϕ^i2ϕ^2=5 ϕiϕ^i

3.2-8 求证: k ln ⁡ k = Θ ( n ) k\ln k=\Theta(n) klnk=Θ(n)蕴含着 k = Θ ( n ln ⁡ n ) k=\Theta(\frac{n}{\ln n}) k=Θ(lnnn)

证明: k ln ⁡ k = Θ ( n ) k\ln k=\Theta(n) klnk=Θ(n),即:

n = Θ ( k ln ⁡ k ) ln ⁡ n = Θ ( ln ⁡ ( k ln ⁡ k ) ) = Θ ( ln ⁡ k + ln ⁡ ln ⁡ k ) = Θ ( ln ⁡ k ) n ln ⁡ n = Θ ( k ln ⁡ k ) Θ ( ln ⁡ k ) = Θ ( k ln ⁡ k ln ⁡ k ) = Θ ( k ) \begin{aligned} n&amp;=\Theta(k\ln k)\\ \ln n&amp;=\Theta(\ln(k\ln k))\\ &amp;=\Theta(\ln k+\ln\ln k)\\ &amp;=\Theta(\ln k)\\ \frac{n}{\ln n}&amp;=\frac{\Theta(k\ln k)}{\Theta(\ln k)}=\Theta(\frac{k\ln k}{\ln k})=\Theta(k) \end{aligned} nlnnlnnn=Θ(klnk)=Θ(ln(klnk))=Θ(lnk+lnlnk)=Θ(lnk)=Θ(lnk)Θ(klnk)=Θ(lnkklnk)=Θ(k)

k = Θ ( n ln ⁡ n ) k=\Theta(\frac{n}{\ln n}) k=Θ(lnnn)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值