这个笔记用于我本人的复习,所以引用了很多东西。如果被侵权了请联系我,我会删掉,谢谢。:-)
写这个笔记,根本目的是希望我能养成做有效笔记的习惯,帮助我提高学习的效率。除此之外,我还希望能借由这个渠道来锻炼我书面表达的能力(因为发现上了大学之后越来越不会写文章了,偏偏又还有一堆文章要写 :-( )以及提取信息的能力。
说实话,不知道我能坚持多久,但是我还是希望我能一直坚持下去。
今天来谈谈关于算法设计的那些数学基础:
高低阶函数(上界和下界)
以下各项的从左到右逐渐递增:
同阶函数定义:
证明同阶函数的例子:
而要反正不是同阶函数也比较简单,使用反证法即可。
低阶函数定义:
关于渐进上界(O)与渐进紧界(Θ,读音西塔)之间的关系:
这里初次提到了多项式界限的概念。
高阶函数集合:
这里有一个易错点,O表示低阶函数集合,O表示的为渐进上界,可以理解为g为f的上界;相对的,高阶函数集合Ω(欧米伽)即为渐进下界,当然也可以理解为g为f的下界。
下面这个定义很重要,是个充要条件:
这里有以下对Ω的使用规范:
在这里,n就是一个下界,所以任何情况都是要比n大的。
接下来定义严格高低阶函数,注意它们之间的区别:除了≥和≤被换成了>和<之外,严格高低阶函数还要求对任意正常数c,而非严格情况下我们只要能找到一个c就可以了。
从下面的证明可以看出:
再往下看之前,你可以先思考一下小o、大O和θ之间的关系如何。
如下:可以说小o表示了一种“不紧的上界”
下面是一个比较常见的定义:
下面是严格高阶函数的定义:
对于这个ω(这个也叫欧米伽,不过是小写的),根据前面的知识,我们知道它表示了一种“不紧的下界”。
对于ω,上面的那个极限也从0变成了无穷。
从上面我们可以看出,符合等价关系的只有θ了。
级数
以下这些级数知识需要我们记一记,也许你还记得你曾经在微积分课上和他们见过面:
(其实这第一个式子就是你求等比数列之和公式的原理,眼熟吗)
用数学归纳法来证明低阶函数,这里的3/2是最后一步才得到的,显然是先推后补的结果。
下面有一个易错案例。
这是一种错误的证明方法,我来谈谈我的理解:
这里是用到了数学归纳法。错误的原因在于最后那个部分:O(n)+(n+1)=O(n)。
按定义,前面的O(n)中一定包含一个c值。问题在于,这个c值是定下来的!f(n)≤cg(n)为真,不说明f(n)+n+1≤cg(n)亦为真。
所以注意,到了要证明的时候老老实实按定义就完事了。
下面这个证明用到了放缩,还有前面的级数知识。
训练一下,用上面的方法看看下面这两题:
答案如下:
还有下面这些,但是我们可以记结论,毕竟这不是数学课。
上面那个结论的一些用法:
递归方程
下面这个递归方程是Merge-sort归并排序算法的复杂性方程,后面我们会经常用到。
一些定义:
求解递归方程的方法有三种:替换法、迭代法和Master引理
首先看看替换法的例子:
同样的,要证明是高阶函数而且一般猜想失败的时候,加上一个低阶项再试试看。
第二种方法是迭代法,就是循环地展开递归方程,最后看那个和式的结果是怎样的。
看例子:
顺带一提,还有一个变量替换的方法,经变量替换把递归方程变换为熟悉的方程。
下面有两道替换法的习题,拿来练练手吧。
答案如下:
注意到右上角那行小字没有,在递归方程的计算中,底数没影响的,因为lgn = log2(n)/log2(10)
还有一些非典型替换:
最后我们介绍master定理。
可以简化成下面的说法:
什么叫“多项式的大于”,举个例子,n^3比起n^2就是多项式的大于,但是n^2比起nlogn就不是多项式的大于。你可以认为多项式的大小于是指比较双方之间至少要有一个n的差距。
一些使用:
一些陷阱:
一些快速计算训练:
To be continued.