|概念回顾|
当输入规模大到使只有运行时间的增长量级有关时,就使在研究算法的渐进效率。
几个重要渐进记号的定义:
•Θ(g(n))={ f(n): 存在正常数c1,c2和n0,使对所有的n>=n0,有0<=c1g(n)<=f(n)<=c2g(n) }
•O(g(n))={ f(n): 存在正常数c和n0,使对所有n>=n0,有0<=f(n)<=cg(n) }
•Ω(g(n))={ f(n): 存在正常数c和n0,使对所有n>=n0,有0<=cg(n)<=f(n) }
•o(g(n))={ f(n): 对任意正常数c,存在常数n0>0,使对所有的n>=n0,有0<=f(n)<=cg(n) }
•ω(g(n))={ f(n): 对任意正常数c,存在常数n0>0,使对所有的n>=n0,有0<=cg(n)<f(n) }
|习题解答|
3.1-1 设f(n)与g(n)都是渐进非负函数。利用Θ记号的基本定义来证明max(f(n),g(n))=Θ(f(n)+g(n))。
证明:因为f(n)和g(n)都使渐进非负函数,同时假设存在这样的整数c1,c2和n0,使得:
0<=c1(f(n)+g(n))<=max(f(n)+g(n))<=c2(f(n)+g(n)) 成立。
令c2=1,则第3个不等式显然成立,因为两正数之和定大于两个中的最大值;再令c1=1/2,则第2个不等式也成立,因为两正数中最大的一个数定大于或等于两数的平均值;第1个不等式,因为f(n)与g(n)都使渐进非负,所以也显然成立。综上,既该等式确实成立。最后再根据Θ记号的定义可得:max(f(n),g(n))=Θ(f(n)+g(n))。
3.1-2 证明对任意实常数a和b,其中b>0,有
[2] (n+a)^b=Θ(n^b)
证明:要想证明上式成立,先要来证明等式:
[1] 0<=c1(n^b)<=(n+a)^b<=c2(n^b)
也就使说存在两个正常数c1,c2,使得当n充分大时(n+a)^b,能够被夹在c1(n^b)和c2(n^b)中间。显然,因为b>0,c1,c2已知为正常数,所以第一个等式:0<=c1(n^b)当n充分大时成立。接着,第二、三个等式分别除于(n^b)后得(n^b不可能为0):c1<=((n+a)/n)^b<=c2,进一步推得:c1<=(1+a/n)^b<=c2。又因为,a,b均为实常数,且当n充分大时,a/n趋向于0。所以,c1,c2分别可取值1/2,2,使得等式成立,等式(1)成立,也就证明了等式(2)成立。
3.1-3 解释为什么“算法A的运行时间至少是O(n²)”这句话是无意义的。
答:根据O记号的定义可知,它是用来表示上界的,当用它作为算法的最坏情况运行时间的上界时,就有对任意输入的运行时间的上界。我们说“一个算法A的运行时间为O(n²)”,它表示的是说该算法运行时间的一个上界,适用于每个输入的运行时间,这与题中的“至少是”表达的是同一个意思。所以题中的话是无意义的。
3.1-4 2^(n+1)=O(2^n)成立吗?2^(2n)=O(2^n)成立吗?
答:第一个成立;第二个不成立。
因为,[1] 0<=2^(n+1)<=c(2^n),当n充分大时,第一个等式0<=2^(n+1)显然成立。第二个等式两边分别除以2^n,得:2<=c,即c>=2。即存在这样两个正常数c(c可取大于等于2的任意一个常数)使得等式(1)成立,所以得:2^(n+1)=O(2^n)成立。
同理,0<=2^(2n)<=c(2^n),第二个等式两边除以(2^n)得:2^n<=c,因为c为正常数,当n充分大时,不存在这样的c使之成立,也就证明了,2^(2n)=O(2^n)不成立。
3.1-5 证明定理3.1
定理3.1 在o中表示当n趋于无穷大时,函数f(n)相对于g(n)来说就不重要了。
证明:根据o记号的定义:对f(n)=o(g(n)),界o<=f(n)<=cg(n)对所有常数c>0成立,这句话说明了函数g(n)的增长速度要快于f(n),当n趋向无穷大时,差距就更大了。所以等式3.1时成立的。
3.1-6 证明:一个算法的运行时间是Θ(g(n))当且仅当其最坏情况运行时间O(g(n)),且最佳情况运行时间是Ω(g(n))。
证明:一个算法的运行时间是Θ(g(n)),则说明存在这样两个正常数c1,c2使得(当n充分大时):0<=c1g(n)<=f(n)<=c2g(n),因而等式0<=c1g(n)<=f(n)成立,完整地说,即存在正常数c1和n0,使得对所有n>=n0,有0<=c1g(n)<=f(n)成立。所以,根据Ω记号的定义得:该算法的最佳情况运行时间是Ω(g(n))。同理,因为等式0<=f(n)<=c2g(n)成立,所以该算法的最坏情况运行时间是O(g(n))。综上,证得该说法成立。
3.1-7 证明o(g(n))∩ω(g(n))是空集。
证明:根据o(g(n))={ f(n): 对任意正常数c,存在常数n0>0,使对所有的n>=n0,有0<=f(n)<=cg(n) },而集合ω(g(n))={ f(n): 对任意正常数c>0,存在常数n0>0,使对所有n>=n0,有0<=c(g(n))<f(n) }。在同等条件下有以下两个等式:
[1] 0<=f(n)<=cg(n)¹,o(g(n))
[2] 0<=cg(n)²<f(n), ω(g(n))
推得:
[1] g(n)¹>=(1/c)f(n)
[2] g(n)²<(1/c)f(n)
可得,o(g(n))和ω(g(n))两集合没有共有部分。即证得o(g(n))∩ω(g(n))是空集。
3.1-8 可以将我们的表示法扩展到有两个参数n和m的情形,其中n和m的值可以以不同的速率,互相独立地趋于无穷。对给定的函数g(n,m),O(g(n,m))为函数集
O(g(n,m))={ f(n,m): 存在正整数c,n0和m0,使对所有n>=n0或m>=m0,有0<=f(n,m)<=cg(n,m) }。
给出对应的Ω(g(n,m))和Θ(g(n,m))的定义。
[1] Ω(g(n,m))={ f(n,m): 存在正整数c,n0和m0,使对所有n>=n0或m>=m0,有0<=cg(n,m)<=f(n) }
[2] Θ(g(n,m))={ f(n,m): 存在正整数c1,c2,n0和m0,n0和m0,使对所有n>=n0或m>=m0,有0<=c1g(n,m)<=f(n)<=c2g(n,m) }
http://www.cnblogs.com/timebug/archive/2010/03/25/1694286.html
分享到:
相关推荐
- **第三章:函数的增长**(第43页) - **3.1 渐进符号**:定义大O记号、Ω记号、Θ记号等,并讨论它们在描述算法效率时的应用。 - **3.2 标准记号与常见函数**:列举并解释常见的函数类型,如对数函数、指数函数...
- 3.1 渐进记号:引入了大O、Ω、Θ等渐进符号来描述函数的增长速度。 - 3.2 标准记号和常见函数:列举了一些常用函数及其渐近增长率。 - **第四章 递归** - 4.1 替换方法:一种用于求解递归式的方法。 - 4.2 ...
### 三、函数的增长(第3章) 这一章重点介绍了用于描述函数增长速度的数学工具。特别是,它解释了大O表示法、小o表示法、大Ω表示法、小ω表示法以及Θ表示法的概念。这些符号用于描述算法的渐进行为。 #### 3.1 ...
- **3.1-1 至 3.1-8**:这些题目围绕渐进记号展开,例如大O记号、大Ω记号、大Θ记号等,它们被用来表示函数的增长速度。理解这些记号有助于评估算法随输入规模变化时的表现。 - **3.2 标准记号和常用函数** - **...
- **第3章:函数的增长** - **3.1 渐进符号**:解释了大O、小o、Ω、θ等渐进符号的意义。 - **3.2 标准记号和常见函数**:列出了在分析算法时常用的函数和记号。 - **第4章:分治法** - **4.1 最大子数组问题*...
### 第3章 - 增长阶函数 #### 3.1 渐进记号 - **3.1-1**:定义并理解大O、小o、θ、Ω和ω记号。 - **3.1-2**:比较不同渐进记号之间的差异。 - **3.1-3**:了解如何使用渐进记号来描述算法的运行时间。 - **3.1-4...
- **渐进记号**:大O记号用于表示函数的最大上界,Ω记号表示最小下界,而Θ记号则表示函数的精确增长速度。 - **分治法**:将问题分解为更小的子问题,递归地解决这些子问题,并最终合并子问题的解得到原问题的解。...
- **3.1 渐进记号**:介绍大O记号、Ω记号、θ记号等概念,用于描述算法效率随输入规模增长的变化趋势。 - **3.2 标准记号与常见函数**:列举常用的时间复杂度表示方法以及典型函数类型。 - **第4章:分治法** -...