您的位置:首页 > 其它

算法导论 学习笔记 第三章 函数的增长

2017-07-27 12:35 351 查看
以后算法导论的学习笔记久发不在算法导论这个类别,下面是前两章的链接:

第一章

第二章

第三章 Growth of functions

这一章讲了两大部分。第一部分是讲了渐进符号,有theta,bigO,bigΩ,littleo,littleΩ。第二部分讲了几个常见的数学知识。

渐进符号

Θ符号

渐进符号表示的都是算法的输入规模无限大的时候的运行时间的增长率。
例如:f(n) = Θ(n^2)
表示的是在n足够大的时候f(n)的增长率是差不多n的二次方。下面给出准确定义:
Θ(g(n)) = {f(n):存在两个常数c1和c2,当n >= n0的时候。满足 0 <= c1g(n) <= f(n) <= c2g(n)}
从定义我们就可以明白Θ(g(n))表示的是一个集合。
值得注意的是例如上面的表达式f(n) = Θ(n^2)中的等号相当于“is”,而不是等于。
还有一点是上面的等式成立的条件是***存在***两个常数。满足定义中的情况。只要存在两个常数满足定义那就可以了。


O符号

Θ符号是比较强大的符号。它可以比较准确的表示函数的增长率。
而O符号表示的是一个函数的渐进上界。相对来说比较弱。上定义:
O(g(n)) = {f(n):存在正数c和n0.当n>=n时,满足0 <= f(n)<= cg(n)}
从定义我们可以得出以下结论:Θ(g(n))属于O(g(n)).


Ω符号(bigomega)

明白了大O符号,理解大Ω就不难了。因为大Ω符号表示的是函数的一个渐进下界。感觉说什么都是虚的,上定义:
Ω(g(n)) = {f(n):存在正数c和n0.当n>=n时,满足0<=cg(n)<=f(n)}
这里有个定义(翻译水平有限我就抄原文了):

For any two functions f(n) and g(n),we have f(n) = Θ(g(n)) if and only if f(n) = O(g(n)) and f(n) = Ω(g(n)).


渐进符号在等号左边和右边的情况

有两种种情况:


在等号右边,例如:2n^2 + 3n + 1 = 2n^2 + Θ(n).

这个是表示有存在一个f(n)属于Θ(n),满足上面的等式,而对于这个例子,f(n) = 3n + 1.而3n +1 确实属于Θ(n)。


在等号左边,例如:2n^2 + Θ(n) = Θ(n^2)

这个又改怎么理解呢?可以这样理解:对任意f(n)属于Θ(n)一定存在一个g(n)属于Θ(n^2)满足2n^2 + f(n) = g(n).


o(小o)符号

小o符号是跟大O符号相对的。大O符号是渐进上界,并且这个上界是跟函数是比较近的渐进。
小o符号表示的也是一种渐进上界,但是这种上界不是跟函数tight的。(现在明白写作和翻译的难度了。。明明心里明白,却表达不出来。。)没办法!上定义,上例子:
o(g(n) = {f(n):for any positive constant c > 0,there exists a constant n0 > 0 such that 0 <=f(n) < cg(n) for all n >= n0}.
for example,2n = o(n^2),but 2n^2 != o(n^2).
这就是传说中的只能意会了....


ω符号(little omega)

啥也不说了。上定义,上例子:

ω(g(n) = {f(n):for any positive constant c > 0,there exists a constant n0 > 0 such that 0 <= cg(n) < f(n) for all n >= n0}.
for example,n^2/2 = ω(n),but n^2/2 != ω(n^2).

其实把上面两种定义跟符号O(大)和Ω符号的定义相比久明白它们的差别了。大的定义里面用的是<=/>=,而小的里面用的是</>...


函数的比较ΘOΩoω

1.传递性(Transitivity):ΘOΩoω
2.自反性(Reflexivity):ΘOΩ
3.对称性(Symmetry):Θ
4.转置对称性(Transpose symetry):Θ and Ω,o and ω

书上还讲了一个实数的属性不适合用在渐进符号。那就是三分法。大概意思是实数中的任意两个都是可以比较的。
结果是等于,小于,大于这三种的一个。但是有些渐进符号是无法去比较的。比如n和n^(1+sinx)...


标准符号和常见的函数

1.单调性(monotonicity)

2.下取整(Floors)和上取整(Ceilings)

3.模运算(Modular arithmetic)

觉得这里的两个东西是我以前没见过的。
1.定义:a mod n = a - 下取整(a/n)*n
2.a 恒等于 b(mod n) :表示的是n对于a和b取模运算得到的结果是相等的。


4.多项式

5.指数

这里也有个新的东西:那就是底数大于n的任何指数的增长率比任意多项式的高。
n^b = o(a^n) (a > 1)


6.对数

lgn表示的是底数为2的对数


7.阶乘(Factorias)

n! = o(n^n)
n! = ω(2^n)
lg(n!) = Θ(nlgn)


8.函数的迭代(Functional iteration)

9.多重对数(The iterated logarithm function)

lg*n(log star of n) = min{i >= 0:lg(i)n < = 1}
这个我看了好一会儿才明白。原来lg*n指的是多少重的次数


10.斐波那契数列(Fibonacci numbers)

这里提了两个东西,一个是黄金比例(golden ratio),另一个是共轭数(conjugate).暂时闹不机密...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: