前言:
要开始算法的学习,除了那些让我们感到神奇的算法思想以外,我们还是需要知道一些基本的概念,掌握一些基本的数学基础。
一、算法复杂性分析
在数据结构中我们看时间复杂度的大小都是简化的看问题规模和基本语句。这里我们可以简化归纳一下,我们只需要考虑当问题规模充分大时,算法复杂性在渐进意义下的阶。
那么你肯定知道,我要介绍五个“友好”的符号给你,当然这个是很好理解的。
定义:设f和g是定义域为自然数集N上的函数,若存在正数c和n0,使得对一切n>=n0有
0<=f(n)<=cg(n)成立,则称f(n)的渐进的上界是g(n),记作f(n) = O(g(n))
定义:设f和g是定义域为自然数集N上的函数。若存在正数c和n0,使得对一切n>=n0有0<=cg(n)<=f(n)成立,则称f(n)的渐进的下界是g(n),记作f(n)=Ω\OmegaΩ(g(n))
定义:设f和g是定义域为自然数集N上的函数。若对于任意正数c都存在n0,使得对一切n>=n0有0<=f(n)<cg(n)成立,则记作f(n)=o(g(n))
定义:设f和g是定义域为自然数集N上的函数。若对于任意正数c都存在n0,使得对一切n>=n0有0<=cg(n)<f(n)成立,则记作f(n)=ω\omegaω(g(n))
定义:若f(n) = O(g(n))且f(n) = Ω\OmegaΩ(g(n)),则记作f(n) = Θ\ThetaΘ(g(n)),我们说f(n)与g(n)同阶。
二、有关函数渐进的界的三个定理(会有涉及高等数学知识,不过就是简单的积分和极限)
定理一
定理二
定理三
三、NP完全性理论
人们通常将可在多项式时间内解决的问题看做是“易”解决问题,而降需要指数函数时间解决的问题看做是“难”问题。所有可以在多项式时间内求解的判定问题构成P类问题。
P类问题是确定性计算模型下的易解决问题类,而NP类问题是非确定性计算模型下的易验证问题类。所有非确定性多项式时间可解的判定问题构成NP类问题。
四、数学基础
这里介绍几类重要的函数:基本函数类(指数级、多项式级、对数多项式级):对数函数、指数函数、取整函数。像这些基本的我们就需要知道它们的运算性质,可以估计函数的阶。
那么算法的数学基础来了:
一看到这个是不是就想到了一些学过的基本公式:
序列求和基本公式:等差数列、等比数列、调和级数
估计序列和:
放大法求上界、用积分做和式的渐进的界
提起这个是不是想到高中推到公式时候的感觉,哈哈。
定义:设序列a0,a1,…,an,简记为{an},一个把an与某些个ai(i<n)联系起来的等式叫做关于序列{an}的递归方程。
我们可以知道就有直接迭代,带入初值,然后求和。对递推方程进行换元,然后求和,求和后进行相反换元,得到原始递推方程的解。(可用数学归纳法验证)
对于高阶递推方程要先用差消法化简为一阶方程,然后迭代求解。
递归树是迭代计算的模型,递归树的生成过程与迭代过程一致,递归树上所有项恰好是迭代之后产生和式中的项,对递归树上的项求和就是迭代后方程的解。
定理:设a>=1,b>1为常数,f(n)为函数,T(n)为非负整数,且T(n)=aT(n/b)+f(n),则
1)若f(n)=O(nlog~b~a-&),&>0,那么T(n)=Θ\ThetaΘ(nlog~b~a)
2)若f(n)=Θ\ThetaΘ(nlog~b~a),那么T(n)=Θ\ThetaΘ(nlog~b~alogn)
3)若f(n)=Ω\OmegaΩ(nlog~b~a+&),&>0,且对于某个常数c<1和充分大的n有af(n/b)<=cf(n),那么T(n)=Ω\OmegaΩ(f(n))
后记:
额,反正整理到这里需要理清楚自己的逻辑,然后这些东西就很简单了,之后就开始我们正式的算法之路,下一篇,递归与分治策略。如果公式有误,评论指出哦,谢谢。