渐进分析及主定理
2013-07-13 16:42
162 查看
一、渐进分析
渐进分析的目的是为了忽略依赖于机器的常量,关注运行时间的增长。下面介绍渐进分析的几种记号:
Θ记号:f(n)=Θ(g(n)),对于任一函数f(n),存在正常数c1,c2,使当n充分大时,f(n)能被夹在c1g(n)和c2g(n)中间,g(n)是f(n)的一个渐进确界。
O记号:Θ记号给出的是一个函数的上界和下界,当只有渐进上界时,使用O记号。例如快速排序时间复杂度为O(nlgn)。
Ω记号:给出函数的渐进下界。
o记号:给出的不是渐进紧确的上界,2n^2 = O(n^2)是渐进紧确的,2n = O(n^2)却不是,用o记号表示非渐进紧确的上界。
ω记号:对应o记号,非渐进紧确下界。
将函数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) = ω(g(n)) ≈ a > b
在进行算法分析时我们通常用O来衡量一个算法时间复杂度的好坏,我们需要的是算法在最坏情况下算法的性能,因为最好情况通常出现的概率很小。
二、主定理
我们对算法进行分析时通常会得出递归式,例如归并排序,将n个数分成两个n/2,将n/2使用递归继续分解,最终将两个n/2排好序的数进行合并,需要时间是Θ(n)。总的需要的时间T(n) = 2T(n/2) + Θ(n),通过该递归式可以得出该算法的时间复杂度。
递归式解法通常有三种方法:
1、代换法:首先猜测解的形式,然后用数学归纳法找出使解真正有效的常数。在此不细说。
2、递归树法:将递归式往下分解,直到达到常数,然后将所有数加起来,看起来繁琐,其实不难。可以用该法获得解的形式,然后用代换法证明,也不细说。
3、主定理:此法有公式,根据递归式形式带入即可求解,证明用可用递归树法,具体可查资料,由于公式复制不进来,下面附图片。
看一个列子,T(n) = 9T(n/3) + n,a = 9,b = 3,f(n) = n,则
渐进分析的目的是为了忽略依赖于机器的常量,关注运行时间的增长。下面介绍渐进分析的几种记号:
Θ记号:f(n)=Θ(g(n)),对于任一函数f(n),存在正常数c1,c2,使当n充分大时,f(n)能被夹在c1g(n)和c2g(n)中间,g(n)是f(n)的一个渐进确界。
O记号:Θ记号给出的是一个函数的上界和下界,当只有渐进上界时,使用O记号。例如快速排序时间复杂度为O(nlgn)。
Ω记号:给出函数的渐进下界。
o记号:给出的不是渐进紧确的上界,2n^2 = O(n^2)是渐进紧确的,2n = O(n^2)却不是,用o记号表示非渐进紧确的上界。
ω记号:对应o记号,非渐进紧确下界。
将函数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) = ω(g(n)) ≈ a > b
在进行算法分析时我们通常用O来衡量一个算法时间复杂度的好坏,我们需要的是算法在最坏情况下算法的性能,因为最好情况通常出现的概率很小。
二、主定理
我们对算法进行分析时通常会得出递归式,例如归并排序,将n个数分成两个n/2,将n/2使用递归继续分解,最终将两个n/2排好序的数进行合并,需要时间是Θ(n)。总的需要的时间T(n) = 2T(n/2) + Θ(n),通过该递归式可以得出该算法的时间复杂度。
递归式解法通常有三种方法:
1、代换法:首先猜测解的形式,然后用数学归纳法找出使解真正有效的常数。在此不细说。
2、递归树法:将递归式往下分解,直到达到常数,然后将所有数加起来,看起来繁琐,其实不难。可以用该法获得解的形式,然后用代换法证明,也不细说。
3、主定理:此法有公式,根据递归式形式带入即可求解,证明用可用递归树法,具体可查资料,由于公式复制不进来,下面附图片。
看一个列子,T(n) = 9T(n/3) + n,a = 9,b = 3,f(n) = n,则
相关文章推荐
- 算法 渐进 大θ定理 / 实例分析
- 数学分析原理 定理 6.10
- hdu1788 中国剩余定理的分析
- 数学分析_Tom Apostol_定理7.48:黎曼可积的充要条件
- python 读书笔记(2)算法的渐进分析
- 数学分析(Tom M.Apostol) 定理6.5
- 数学分析原理 定理 6.5
- 数学分析原理 定理 6.10
- 时间复杂度分析——主定理
- 数学分析_Tom Apostol_定理7.48:黎曼可积的充要条件
- 数学分析(Tom M.Apostol) 定理6.5
- 数学分析原理 定理 6.5
- 数学分析原理 定理 6.12
- .NET下文本相似度算法余弦定理和SimHash浅析及应用实例分析
- ACM算法-时间复杂度分析(3.渐进符号)
- 数学分析(Tom M.Apostol) 定理6.7
- 数学分析原理 定理 6.12
- 主定理和递归式复杂度分析
- 算法的渐进分析
- 计算机算法分析之渐进记号