目录
第三章 函数的增长
3-1 知识点
Θ \Theta Θ记号
Θ ( g ( n ) ) \Theta(g(n)) Θ(g(n))的含义为:存在正常量 c 1 , c 2 和 n 0 c_1,c_2 和 n_0 c1,c2和n0,使得对所有 n ≥ n 0 n \ge n_0 n≥n0,有 0 ≤ c 1 g ( n ) ≤ f ( n ) ≤ c 2 g ( n ) 0 \le c_1g(n) \le f(n) \le c_2g(n) 0≤c1g(n)≤f(n)≤c2g(n)。
举个例子,当分析插入排序的最坏运行时间时:
- f ( n ) = a 2 n 2 + b n + c f(n) =\frac{a}{2}n^2 + bn +c f(n)=2an2+bn+c
- g ( n ) = n 2 g(n) = n^2 g(n)=n2
在算法导论一书中,通常使用 f ( n ) = Θ ( g ( n ) ) f(n) = \Theta(g(n)) f(n)=Θ(g(n)) 来表示与 f ( n ) ∈ Θ ( g ( n ) ) f(n) ∈ \Theta(g(n)) f(n)∈Θ(g(n)) 相同的含义,即 Θ ( g ( n ) ) \Theta(g(n)) Θ(g(n))代表一个集合, f ( n ) f(n) f(n)代表一个属于 Θ ( g ( n ) ) \Theta(g(n)) Θ(g(n))的函数。
O \Omicron O记号
O ( g ( n ) ) \Omicron(g(n)) O(g(n))的含义为:存在正常量 c c c 和 n 0 n_0 n0,使得对所有 n ≥ n 0 n\ge n_0 n≥n0,有 0 ≤ f ( n ) ≤ c g ( n ) 0 \le f(n) \le cg(n) 0≤f(n)≤cg(n)。
f ( n ) = O ( g ( n ) ) f(n) = \Omicron(g(n)) f(n)=O(g(n)) 一般用来表示 g(n) 的某个常量倍数是 f(n) 的渐进上界,而不要求它是一个多么紧确的上界。比如, n = O ( n 2 ) , n 2 = O ( n 2 ) n = O(n^2), n^2 = O(n^2) n=O(n2),n2=O(n2)都是成立的。
当我们说运行时间为 O ( n 2 ) \Omicron(n^2) O(n2) 时,意指其最坏情况运行时间为 O ( n 2 ) \Omicron(n^2) O(n2)。
Ω \Omega Ω记号
Ω ( g ( n ) ) \Omega(g(n)) Ω(g(n)) 的含义为:存在正常量 c c c 和 n 0 n_0 n0,使得对所有 n ≥ n 0 n\ge n_0 n≥n0,有 0 ≤ c g ( n ) ≤ f ( n ) 0 \le cg(n) \le f(n) 0≤cg(n)≤f(n)
不是所有函数都可渐进比较
设 f ( n ) = n , g ( n ) = n 1 + sin x f(n) = n,g(n) = n^{1+\sin x} f(n)=n,g(n)=n1+sinx,则 f ( n ) = O ( g ( n ) ) , f ( n ) = Ω ( g ( n ) ) f(n) = \Omicron(g(n)),f(n) = \Omega(g(n)) f(n)=O(g(n)),f(n)=Ω(g(n)) 都不成立。f(n) 与 g(n) 的函数图像如下:

练习题
3.1-1
假设 f(n) 和 g(n) 都是渐进非负函数,证明 m a x ( 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))。
因为两者均为渐进非负函数,所以存在正常量 n 0 n_0 n0,使得对所有 n ≥ n 0 n \ge n_0 n≥n0,都有 f ( n ) > = 0 , g ( n ) > = 0 f(n) >= 0, g(n) >= 0 f(n)>=0,g(n)>=0。取 c 1 = 1 2 , c 2 = 3 2 c_1 = \frac{1}{2},c_2=\frac{3}{2} c1=21,c2=23,则对所有 n ≥ n 0 n \ge n_0 n≥n0,都有:
c 1 ∗ m a x ( f ( n ) , g ( n ) ) ≤ f ( n ) + g ( n ) ≤ c 2 ∗ m a x ( f ( n ) , g ( n ) ) c_1*max(f(n), g(n)) \le f(n) + g(n) \le c_2*max(f(n),g(n)) c1∗max(f(n),g(n))≤f(n)+g(n)≤c2∗max(f(n),g(n))
综上, m a x ( 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))
其实, c 1 , c 2 c_1,c_2 c1,c2 有很多选择,但重要的时存在这样的选择。
3.1-2
证明:对任意实常量 a,b,其中 b > 0,有 ( n + a ) b = Θ ( n b ) (n+a)^b = \Theta(n^b) (n+a)b=Θ(nb)
为了证明上述结论,需找到正常量 c 1 , c 2 , n 0 c_1,c_2,n_0 c1,c2,n0 ,使得对所有 n ≥ n 0 n \ge n_0 n≥n0时,都有 0 ≤ c 1 ∗ n b ≤ ( n + a ) b ≤ c 2 ∗ n b 0 \le c_1*n^b \le (n+a)^b \le c_2*n^b 0≤c1∗nb≤(n+a)b≤c2∗nb。
当 n 0 = 2 ∗ ∣ a ∣ n_0 = 2*|a| n0=2∗∣a∣ 时,无论 a 取何值,下述不等式都成立:
∣ a ∣ ≤ n 2 ≤ n − ∣ a ∣ ≤ n + a ≤ n + ∣ a ∣ ≤ 2 ∗ n |a| \le \frac{n}{2} \le n-|a| \le n+a \le n+|a| \le 2*n ∣a∣≤2n≤n−∣a∣≤n+a≤n+∣a∣≤2∗n
即
n 2 ≤ n + a ≤ 2 n \frac{n}{2} \le n+a \le 2n 2n≤n+a≤2n
当 b > 0 时有:
0 < = ( 1 2 n ) b ≤ ( n + a ) b ≤ ( 2 n ) b 0 < = ( 1 2 ) b n b ≤ ( n + a ) b ≤ 2 b n b \begin{aligned} 0 <= (\frac{1}{2}n)^b \le (n+a)^b \le (2n)^b \\ 0 <= (\frac{1}{2})^bn^b \le (n+a)^b \le 2^bn^b \end{aligned} 0<=(21n)b≤(n+a)b≤(2n)b0<=(21)bnb≤(n+a)b≤2bnb
综上,当 c 1 = ( 1 2 ) b , c 2 = 2 b c1=(\frac{1}{2})^b,c2=2^b c1=(21)b,c2=2b 时,对所有 n ≥ n 0 = 2 ∣ a ∣ n \ge n_0 = 2|a| n≥n0=2∣a∣,都有 0 ≤ c 1 ∗ n b ≤ ( n + a ) b ≤ c 2 ∗ n b 0 \le c_1*n^b \le (n+a)^b \le c_2*n^b 0≤c1∗nb≤(n+a)b≤c2∗nb,所以 ( n + a ) b = Θ ( n b ) (n+a)^b = \Theta(n^b) (n+a)b=Θ(nb)。
3.1-3
解释“算法A的运行时间至少是 O ( n 2 ) \Omicron(n^2) O(n2)”这一表述是无意义的。
感觉这是个语文题。 O ( g ( n ) ) \Omicron(g(n)) O(g(n)) 表示运行时间的上界,与“至少”用在一起是个病句。就像说插入排序的运行时间至少是 O ( n 2 ) \Omicron(n^2) O(n2)。
作者的解答如下:

3.1-4
2 n + 1 = O ( 2 n ) 2^{n+1} = \Omicron(2^n) 2n+1=O(2n)成立吗? 2 2 n = O m i c r o n ( 2 n ) 2^{2n} = Omicron(2^n) 22n=Omicron(2n)成立吗?
当 c = 3 时 c = 3 时 c=3时,对于所有 n ≥ n 0 = 1 n \ge n_0 = 1 n≥n0=1,都有 0 ≤ 2 ∗ 2 n = 2 n + 1 ≤ c ∗ 2 n 0 \le 2*2^n = 2^{n+1} \le c*2^n 0≤2∗2n=2n+1≤c∗2n,所以 2 n + 1 = O ( 2 n ) 2^{n+1} = \Omicron(2^n) 2n+1=O(2n)成立。
假设存在 c c c 及 n 0 n_0 n0,使得对所有 n ≥ n 0 n \ge n_0 n≥n0 都有 0 ≤ 2 2 n ≤ c 2 n 0 \le 2^{2n} \le c2^n 0≤22n≤c2n,同除 2 n 2^n 2n得, 0 ≤ 2 n ≤ c 0 \le 2^{n} \le c 0≤2n≤c,因为 c c c 是常量,所以对任意大的 n n n,该不等式不可能成立,故 2 2 n = O m i c r o n ( 2 n ) 2^{2n} = Omicron(2^n) 22n=Omicron(2n)不成立。
3.1-5
证明定理3.1
如果 f ( n ) = Θ ( g ( n ) ) f(n)=\Theta(g(n)) f(n)=Θ(g(n)),则存在正常量 n 0 , c 1 , c 2 n_0,c_1,c_2 n0,c1,c2,使得所有 n ≥ n 0 n \ge n_0 n≥n0, 0 ≤ c 1 g ( n ) ≤ f ( n ) ≤ c 2 g ( n ) 0 \le c_1g(n) \le f(n) \le c_2g(n) 0≤c1g(n)≤f(n)≤c2g(n),根据 Ω ( g ( n ) ) 及 O ( g ( n ) ) \Omega(g(n))及\Omicron(g(n)) Ω(g(n))及O(g(n))的定义不难得出,此时 f ( n ) = Ω ( g ( n ) ) , f ( n ) = O ( g ( n ) ) f(n)=\Omega(g(n)),f(n)=\Omicron(g(n)) f(

本文探讨了函数增长的三个重要记号:Θ、O 和 Ω,阐述了它们的定义和应用场景。通过一系列练习题和思考题,展示了如何比较不同函数的渐进行为,以及这些记号在算法复杂度分析中的应用。
最低0.47元/天 解锁文章
735





