《算法导论》第三章 函数的增长

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

第三章 函数的增长

3-1 知识点

Θ \Theta Θ记号

Θ ( g ( n ) ) \Theta(g(n)) Θ(g(n))的含义为:存在正常量 c 1 , c 2 和 n 0 c_1,c_2 和 n_0 c1,c2n0,使得对所有 n ≥ n 0 n \ge n_0 nn0,有 0 ≤ c 1 g ( n ) ≤ f ( n ) ≤ c 2 g ( n ) 0 \le c_1g(n) \le f(n) \le c_2g(n) 0c1g(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 nn0,有 0 ≤ f ( n ) ≤ c g ( n ) 0 \le f(n) \le cg(n) 0f(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 nn0,有 0 ≤ c g ( n ) ≤ f ( n ) 0 \le cg(n) \le f(n) 0cg(n)f(n)

不是所有函数都可渐进比较

f ( n ) = n , g ( n ) = n 1 + sin ⁡ x f(n) = n,g(n) = n^{1+\sin x} f(n)=ng(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 nn0,都有 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=21c2=23,则对所有 n ≥ n 0 n \ge n_0 nn0,都有:

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)) c1max(f(n),g(n))f(n)+g(n)c2max(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 c1c2 有很多选择,但重要的时存在这样的选择。

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 nn0时,都有 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 0c1nb(n+a)bc2nb

n 0 = 2 ∗ ∣ a ∣ n_0 = 2*|a| n0=2a 时,无论 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 a2nnan+an+a2n

n 2 ≤ n + a ≤ 2 n \frac{n}{2} \le n+a \le 2n 2nn+a2n

当 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)b2bnb

综上,当 c 1 = ( 1 2 ) b , c 2 = 2 b c1=(\frac{1}{2})^b,c2=2^b c1=(21)bc2=2b 时,对所有 n ≥ n 0 = 2 ∣ a ∣ n \ge n_0 = 2|a| nn0=2a,都有 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 0c1nb(n+a)bc2nb,所以 ( 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 nn0=1,都有 0 ≤ 2 ∗ 2 n = 2 n + 1 ≤ c ∗ 2 n 0 \le 2*2^n = 2^{n+1} \le c*2^n 022n=2n+1c2n,所以 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 nn0 都有 0 ≤ 2 2 n ≤ c 2 n 0 \le 2^{2n} \le c2^n 022nc2n,同除 2 n 2^n 2n得, 0 ≤ 2 n ≤ c 0 \le 2^{n} \le c 02nc,因为 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 n0c1c2,使得所有 n ≥ n 0 n \ge n_0 nn0 0 ≤ c 1 g ( n ) ≤ f ( n ) ≤ c 2 g ( n ) 0 \le c_1g(n) \le f(n) \le c_2g(n) 0c1g(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(

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值