1、基本概念
算法
问题:须要回答的通常性提问,一般含若干参数。ide
算法:有限条指令的集合,肯定某个问题的运算或操做的序列。函数
最坏状况时间复杂度:求解规模为n的实例所需最长时间w(n)。spa
平均状况时间复杂度:求解规模为n的实例所须要平均时间w(n)。orm
2、数学基础排序
1函数渐近的界递归
定义1.1设f和g是定义域为天然数N上的函数。数学
(1)若存在正整数c和n0,使得对一切n≥n0有0≤f(n)≤cg(n)成立,则称f(n)的渐近it
的上界是g(n),记做f(n)=O(g(n))。基础
(2)若存在正整数c和n0,使得对一切n≥n0有0≤cg(n)≤f(n)成立,则称f(n)的渐近
的上界是g(n),记做f(n)=Ω(g(n))。
(3)若对于任意的正整数c都存在n0,使得当n≥n0有0≤f(n)<cg(n)成立,则记f(n)=o(g(n))。
(4)若对于任意的正整数c都存在n0,使得当n≥n0有0≤cg(n)<f(n)成立,则记f(n)=ω(g(n))。
(5)若f(n)=O(g(n))且f(n)=Ω(g(n)),则记做f(n)=Θ(g(n))
定理1.1设f和g是定义域为天然数的集合
定理1.2设f,g,h是定义域为天然数集合的函数
(1)若是f=O(g)且g=O(h),那么f=O(h)
(2)若是f=Ω(g)且g=Ω(h),那么f=Ω(h)
(3)若是f=Θ(g)且g=Θ(h),那么f=Θ(h)
定理1.2 证(3)是(1)(2)的直接结果,(2)证实与(1)相似,仅证(1)
根据定义存在某个常数c1和n1,对全部的n≥n1,有f(n)≤c1g(n)。相似的,存在某个常数c2和n2,对全部的n≥n2,有g(n)≤c2h(n)。令n0=max{n1,n2},当n≥n0时有f(n)≤c1g(n)≤c1c2h(n),所以f=O(h)
定理1.3 假设f和g 是定义域为天然数集合的函数,若对某个其它函数h,有f=O(h)和g=O(h),那么f+g=O(h)
推论 假设f和g 是定义域为天然数集合的函数,且知足g=O(f),那么f+g=Θ(f)
定理1.3 与1.2相似
定理1.3推论 显然f+g=Ω(f),由于对于全部的n≥0,有f(n)+g(n)≥f(n)。反之,由g=O(f)以及f=O(f),由定理1.3知f+g=O(f)
定理1.4对每一个b>1和α>0有logbn=o(nα)
定理1.5对每一个r>1和每一个d>0,有nd=o(rn)
定理1.4 1.5 洛必达法则可证
阶乘函数f(n)=n!是增加很快的函数,根据斯特灵公式,阶乘函数
关于阶乘函数有下面结果:
n!=o(nn),n!=ω(2n),log(n!)=Θ(nlogn)
前两个显而易见,仅提供第三个证实
2求和方法
常见数列求和方法:
3递归方程求解
迭代概括法:从原始方程开始,反复将左边函数用左边等式代入,获得初值,化简结果,再代入原方程验证。
递归树:初始递归树只有一个结点,权标记为W(n),不断迭代,直至不含权为函数的结点为止。
例 4 用迭代递归法求解方程W(n)=2(n/2)+n-1,n=2k,W(1)=0
解 W(n)=2W(2k-1)+2k
=2[2W(2k-2)+2k-1-1]+2k-1
=...=2kW(1)+k2k-(2k-1+2k-2+..+2+1)
=k2k-2k+1
=nlogn-n+1
W(1)=1Xlog1-1+1=0符合初始条件,将结果代入原初始方程右边得
2W(n/2)+n-1=2[2k-1log2k-1+1]+2k-1
=2k(k-1)-2k+2+2k-1
=k2k-2k+1
=nlogn-n+1=W(n)
例5用递归树求递推方程T(n)=T(n/3)+T(2n/3)+n
定理1.6主定理 设a≥1,b>1为常数,f(n)为函数,T(n)为非负整数,且T(n)=aT(n/b)+f(n)
则有:
例 6 求递推方程T(n)=9T(n/3)+n
解 a=9,b=3,f(n)=n,那么
nlog39=n2,f(n)=O(nlog39-1),至关于主定理(1),故T(n)=Θ(n2)
例 7 求递推方程T(n)=T(2n/3)+1
解 a=1,b=3/2,f(n)=1,那么
nlog3/21=n0=1,f(n)=1,至关于主定理(2),故T(n)=Θ(logn)
例 8 求递推方程T(n)=3T(n/4)+nlogn
解 a=3,b=4,f(n)=nlogn,那么
nlogn=Ω(nlog43+ε)=Ω(n0.793+ε),ε≈0.2
要使af(n/b)<cf(n)成立,代入f(n)=nlogn,获得
3n/4log(n/4)≤cnlogn
显然只要c≥3/4,上式对充分大n成立,至关于主定理(3),故
T(n)=Θ(f(n)=Θ(nlogn)
例 9 插入算法和二分归并排序算法的时间复杂度
设W(n)表示顺序插入算法 InsertSort对于规模为n的输入在最坏状况下所作的比较次数。若是n-1个数已经排好,最坏的状况下须要将它与前n-1个数中的每个进行1次比较,所以获得递推方程
W(n)=W(n-1)+n-1
W(1)=0
由上面的求解知W(n)=n(n-1)/2=O(n2)
为了简单起见,不妨设n=2k,k为天然数。设W(n)表示二分归并排序算法在最坏状况下所作的比较次数,那么对n个数进行二分归并排序,W(n)知足以下递归方程:
W(n)=2W(n/2)+n-1
W(1)=0
由上面的求解知W(n)=O(nlogn)