函数的增长
Posted 秋风Haut
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数的增长相关的知识,希望对你有一定的参考价值。
第三章的开头提出了三个记号来表示函数的渐近紧确界。
Θ⁆、Ο ⁆和Ω⁆记号:
在每个部分,标出的n0的值是最小的可能值,任何更大的值也将有效。
(a)Θ⁆记号限制一个函数在常量因子内。如果存在正常量n0、c1和c2,使得在no及其右边,f(n)的值总位于c1g(n)和c2g(n)之间或等于它们,那么记f(n)=Θ(g⁆(n))。
(b)Ο⁆记号为函数给出一个在常量因子内的上界。如果存在正数n0和c,使得在n0及其右边,f(n)的值总小于或等于cg(n)的值。那么记f(n)=Ο(g(n))
(c) Ω⁆ 记号为函数给出一个在常量因子内的下界。如果存在正数n0和c,使得在n0及其右边,f(n) 的值总大于或等于cg(n), 那么 记f(n)=Ω(g(n))
记得在第二章中,我们使用O(n^2)来表示算法的运行时间的近似数据级。在书中第三章,作者证明了,即使在数学上, 扔掉低价项,并忽略最高阶项前的系数,这样的等价表示也是成立的。首先是:1/2 n^2−3n=Θ(n^2 ) ⁆ 即:
对正常量c1、c2和n0,使得对所有n>= n0,有: c_1 n^2≤ 1/2 n^2−3n≤ c_2 n^2 ⁆ .
// 使用O记号,我们总是可以仅仅通过检查算法的总体结构就可以 描述算法的运行时间。
证明了渐近上界与f(n)的关系,我们就可以仅仅分析算法的总体结构来描述算法的运行时间。比如在插入排序算法中,一共有两个循环。外循环对n个元素的n-1个都必须进行操作,第二个循环则对每个元素,都要遍历一次已排好序的序列,这序列的最大值也是n,每次遍历的操作时间为O(1),因此,可以说,该双层循环立即产生了O(n^2)的上界。
因此,就要注意这里O(n^2)的意思,不是指对于插入排序的每个输入,它的运行时间都是O(n^2),因为很明显当n个元素已好序时,其时间是O(n)。所以,当我们说“运行时间为O(n^2)时,意指的是存在一个O(n^2)的函数f(n),使得对n 的任意值,不管选择什么特定的规模为n的输入,其运行时间的上界都是f(n),也就是说最坏情况运行时间为O(n^2)。
Ω
Ω记号提供了渐近下界。
ω⁆ 记号 非渐近紧确的下界
ο⁆ 记号 非渐近紧确的下界
以上两个记号出现的原因是因为由Ω确定的渐近下界和Ο确定的渐近上界,有可是是也可能不是渐近紧确的。因此,类比Ο 和 Ω 的定义,给出了ο 和ω 的定义。
ο:
ο(g(n))=f(n)⁆:对任意正常量c>0,存在常量n0>0 ,使得对所有 n≥ n0⁆ ,有0<= f(n) <= cg(n)⁆ 例如,2n=o(n2)⁆ ,但是2n2 ≠ o(n^2)⁆
蕴涵着以下含义:
lim_(n→∞)〖(f(n))/(g(n))=0〗
ω:
ω(g(n))=f(n):对任意正常量c>0,存在常量n0>0,使得对所有n>=n0,有0<= cg(n) <= f(n)。蕴涵着以下含义:
lim_(n→∞)〖(f(n))/(g(n))=〗 ∞
还有渐近运算的运算性质 :
传递性
自反性:
对称性:
转置对称性:
而且:两个函数f和g的渐近比较关系可与实数a与b之间的比较做类比:
f(n)=O(g(n)) 类似于a<= b
f(n)=Ω(g(n)) 类似于a>= b
f(n)=Θ(g(n)) 类似于a= b
f(n)=o(g(n)) 类似于a< b
f(n)=w(g(n)) 类似于a> b
但是实数的三分性不能带到渐近运算中:
对任意两个实数a和b,下列三种情况恰有一种必须成立:a < b, a=b, 或a > b。
虽然任意两个实数都可以进行比较,但不是所有函数都可以渐近比较。也就是对于两个函数f(n)和g(n),可能f(n)=Ο(g(n)) 或 f(n) = Ω(g(n))都不成立。
3.2 标准记号与常用函数
3.2节在我看来就是复习了高中知识,其中讲解了以下函数模型及术语:
单词性
向下取整与向上取整
模运算
多项式
指数
对数
阶乘
多重函数
多重对数函数:是一个增长非常慢的函数
斐波那契数列:可以证明斐波那契数列以指数形式增长。
第三章完。
越看算法导论,越有一种强烈的意识:它是教你怎样设计算法,从第2章开始讲解分析算法复杂度的步骤,以及分治法这种设计算法的技术,到第三章全部是度量算法复杂度的函数模型(工具),该书从最基础的讲起,以数字的方式严谨清晰的证明各种定理,定义各种模型。这让我本来上学没有理解的数学概念,许多认为没有意义的数学概念,在这里感受到了实实在在地用处,这些知识被赋予了生命力。在我看来,书中的字不再是字,而是一幅一幅鲜活的图像,向我展示着作者的思想(当时我现在的程度还无法彻底领悟到大牛的思想),有种非常强烈的与作者沟通的快感。
相信我接下来《算法导论》的学习会更加有意义。
PS:课后习题大概看了一遍,练习题比较简单,都是对章节内容的重复考查。难度不大。思考题目的在于启发思考,难度稍大,但总体来说,完全可以解决。基本上都是看一遍就有了证明思路。潜在问题是,没有下笔写,没有看过标准答案,无法从数学上证明我的证明是正确的。(无法做到像作者那样的严谨清晰,只是能讲明思路)
之后会不定期更新后面的思考题。
以上是关于函数的增长的主要内容,如果未能解决你的问题,请参考以下文章