算法基础

1、基本概念
算法

问题:须要回答的通常性提问,一般含若干参数。ide

算法:有限条指令的集合,肯定某个问题的运算或操做的序列。函数

最坏状况时间复杂度:求解规模为n的实例所需最长时间w(n)spa

平均状况时间复杂度:求解规模为n的实例所须要平均时间w(n)orm

2、数学基础排序

1函数渐近的界递归

定义1.1fg是定义域为天然数N上的函数。数学

(1)若存在正整数cn0,使得对一切nn0有0f(n)cg(n)成立,则称f(n)的渐近it

 

的上界是g(n),记做f(n)=O(g(n))基础

 

(2)若存在正整数cn0,使得对一切nn00cg(n)f(n)成立,则称f(n)的渐近

 

的上界是g(n),记做f(n)=(g(n))

 

(3)若对于任意的正整数c都存在n0,使得当n≥n00f(n)<cg(n)成立,则记f(n)=o(g(n))

 

(4)若对于任意的正整数c都存在n0,使得当nn00cg(n)<f(n)成立,则记f(n)=ω(g(n))。

 

(5)若f(n)=O(g(n))f(n)=Ω(g(n)),则记做f(n)=Θ(g(n))

定理1.1fg是定义域为天然数的集合



定理1.2f,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)

根据定义存在某个常数c1n1,对全部的n≥n1,有f(n)≤c1g(n)。相似的,存在某个常数c2n2,对全部的n≥n2,有g(n)≤c2h(n)。令n0=max{n1,n2},当n≥n0时有f(n)≤c1g(n)≤c1c2h(n),所以f=O(h)

定理1.3  假设fg是定义域为天然数集合的函数,若对某个其它函数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),由于对于全部的n0,有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主定理 设a1,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

显然只要c3/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)

相关文章
相关标签/搜索