欢迎来到天天文库
浏览记录
ID:26289546
大小:340.37 KB
页数:48页
时间:2018-11-25
《时间复杂度--经典解说》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、时间复杂度分析算法时间复杂度的数学意义从数学上定义,给定算法A,如果存在函数f(n),当n=k时,f(k)表示算法A在输入规模为k的情况下的运行时间,则称f(n)为算法A的时间复杂度。其中:输入规模是指算法A所接受输入的自然独立体的大小,我们总是假设算法的输入规模是用大于零的整数表示的,即n=1,2,3,……,k,……对于同一个算法,每次执行的时间不仅取决于输入规模,还取决于输入的特性和具体的硬件环境在某次执行时的状态。所以想要得到一个统一精确的F(n)是不可能的。为此,通常做法:1.忽略硬件及环境因素,假设每次执行时硬件条件和环境条件是完
2、全一致的。2.对于输入特性的差异,我们将从数学上进行精确分析并带入函数解析式。例子:x=1;for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++) x++;x++运行次数:算法的渐近时间复杂度很多时候,我们不需要进行如此精确的分析,究其原因:1.在较复杂的算法中,进行精确分析是非常复杂的。2.实际上,大多数时候我们并不关心F(n)的精确度量,而只是关心其量级。算法复杂度的考察方法(1)考察一个算法的复杂度,一般考察的是当问题复杂度n的增加时,运算所需时间、空间代价f(n
3、)的上下界。(2)进一步而言,又分为最好情况、平均情况、最坏情况三种情况。通常最坏情况往往是我们最关注的。(1)上界函数定义1如果存在两个正常数c和n0,对于所有的n≥n0,有
4、T(n)
5、≤c
6、f(n)
7、则记作T(n)=Ο(f(n))含义:如果算法用n值不变的同一类数据在某台机器上运行时,所用的时间总是小于
8、f(n)
9、的一个常数倍。所以f(n)是计算时间T(n)的一个上界函数。试图求出最小的f(n),使得T(n)=Ο(f(n))。在分析算法的时间复杂度时,我们更关心最坏情况而不是最好情况,理由如下:(1)最坏情况给出了算法执行时间的上界,我
10、们可以确信,无论给什么输入,算法的执行时间都不会超过这个上界,这样为比较和分析提供了便利。(2)虽然最坏情况是一种悲观估计,但是对于很多问题,平均情况和最坏情况的时间复杂度差不多,比如插入排序这个例子,平均情况和最坏情况的时间复杂度都是输入长度n的二次函数。定义1.2如果存在两个正常数c和n0,对于所有的n≥n0,有
11、T(n)
12、≥c
13、g(n)
14、则记作T(n)=Ω(g(n))含义:如果算法用n值不变的同一类数据在某台机器上运行时,所用的时间总是不小于
15、g(n)
16、的一个常数倍。所以g(n)是计算时间T(n)的一个下界函数。试图求出“最大”的g(
17、n),使得T(n)=Ω(g(n))。(2)下界函数定义1.3如果存在正常数c1,c2和n0,对于所有的n≥n0,有c1
18、g(n)
19、≤
20、T(n)
21、≤c2
22、g(n)
23、则记作含义:算法在最好和最坏情况下的计算时间就一个常数因子范围内而言是相同的。可看作:既有T(n)=Ω(g(n)),又有T(n)=Ο(g(n))(3)“平均情况”限界函数常见算法时间复杂度:O(1):表示算法的运行时间为常量O(n):表示该算法是线性算法O(㏒2n):二分搜索算法O(n㏒2n):快速排序算法O(n2):对数组进行排序的各种简单算法,例如直接插入排序的算法。O(n3)
24、:做两个n阶矩阵的乘法运算O(2n):求具有n个元素集合的所有子集的算法O(n!):求具有N个元素的全排列的算法优<---------------------------<劣O(1)25、果找到了这样的公式,我们可以用两种方法对它进行验证:第一,将它直接代入递归方程和初始条件中。第二,用数学归纳法来证明。例如,考虑如下递推式:X(n)=2X(n-1)+1n>1X(1)=1x(1)=1x(2)=2x(1)+1=2*1+1=3x(3)=2x(2)+1=2*3+1=7x(4)=2x(3)+1=2*7+1=15X(n)=2^n-1n>0(2)反向替换法例如:X(n)=x(n-1)+n使用所讨论的递推关系,将x(n-1)表示为x(n-2)得函数,然后把这个结果代入原始方程,来把x(n)表示为x(n-2)的函数。重复这一过程。X(n)=26、x(0)+1+2+3+4+5…+n=0+1+2+3=4=n(n+1)/2(3)换名上面形式的在递推关系式,一个规模为n的问题,每一次递归调用后,都简化为n/k规模的问题,为了方便
25、果找到了这样的公式,我们可以用两种方法对它进行验证:第一,将它直接代入递归方程和初始条件中。第二,用数学归纳法来证明。例如,考虑如下递推式:X(n)=2X(n-1)+1n>1X(1)=1x(1)=1x(2)=2x(1)+1=2*1+1=3x(3)=2x(2)+1=2*3+1=7x(4)=2x(3)+1=2*7+1=15X(n)=2^n-1n>0(2)反向替换法例如:X(n)=x(n-1)+n使用所讨论的递推关系,将x(n-1)表示为x(n-2)得函数,然后把这个结果代入原始方程,来把x(n)表示为x(n-2)的函数。重复这一过程。X(n)=
26、x(0)+1+2+3+4+5…+n=0+1+2+3=4=n(n+1)/2(3)换名上面形式的在递推关系式,一个规模为n的问题,每一次递归调用后,都简化为n/k规模的问题,为了方便
此文档下载收益归作者所有