1 / 4
文档名称:

算法复杂度分析.doc

格式:doc   大小:45KB   页数:4页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

算法复杂度分析.doc

上传人:花开一叶 2019/1/11 文件大小:45 KB

下载得到文件列表

算法复杂度分析.doc

相关文档

文档介绍

文档介绍:算法复杂度分析1、算法的时间性能分析(1)算法耗费的时间和语句频度一个算法所耗费的时间=算法中每条语句的执行时间之和每条语句的执行时间=语句的执行次数(即频度(FrequencyCount))×语句执行一次所需时间   算法转换为程序后,每条语句执行一次所需的时间取决于机器的指令性能、速度以及编译所产生的代码质量等难以确定的因素。   若要独立于机器的软、硬件系统来分析算法的时间耗费,则设每条语句执行一次所需的时间均是单位时间,一个算法的时间耗费就是该算法中所有语句的频度之和。求两个n阶方阵的乘积C=A×B,其算法如下:#definen100//n可根据需要定义,这里假定为100voidMatrixMultiply(intA[a],intB[n][n],intC[n][n]){//右边列为各语句的频度inti,j,k;(1)for(i=0;i<n;j++)n+1(2)  for(j=0;j<n;j++){n(n+1)(3)    C[i][j]=0;n2(4)    for(k=0;k<n;k++)n2(n+1)(5)      C[i][j]=C[i][j]+A[i][k]*B[k][j];n3      }    }   该算法中所有语句的频度之和(即算法的时间耗费)为:        T(n)=2n3+3n2+2n+1()分析: 语句(1)的循环控制变量i要增加到n,测试到i=n成立才会终止。故它的频度是n+1。但是它的循环体却只能执行n次。语句(2)作为语句(1)循环体内的语句应该执行n次,但语句(2)本身要执行n+1次,所以语句(2)的频度是n(n+1)。同理可得语句(3),(4)和(5)的频度分别是n2,n2(n+1)和n3。  算法MatrixMultiply的时间耗费T(n)是矩阵阶数n的函数。(2)问题规模和算法的时间复杂度   算法求解问题的输入量称为问题的规模(Size),一般用一个整数表示。矩阵乘积问题的规模是矩阵的阶数。一个图论问题的规模则是图中的顶点数或边数。一个算法的时间复杂度(plexity,也称时间复杂性)T(n)是该算法的时间耗费,是该算法所求解问题规模n的函数。当问题的规模n趋向无穷大时,时间复杂度T(n)的数量级(阶)称为算法的渐进时间复杂度。算法MatrixMultidy的时间复杂度T(n)如()式所示,当n趋向无穷大时,显然有这表明,当n充分大时,T(n)和n3之比是一个不等于零的常数。即T(n)和n3是同阶的,或者说T(n)和n3的数量级相同。记作T(n)=O(n3)是算法MatrixMultiply的渐近时间复杂度。(3)渐进时间复杂度评价算法时间性能主要用算法时间复杂度的数量级(即算法的渐近时间复杂度)评价一个算法的时间性能。算法MatrixMultiply的时间复杂度一般为T(n)=O(n3),f(n)=n3是该算法中语句(5)的频度。下面再举例说明如何求算法的时间复杂度。交换i和j的内容。   Temp=i;   i=j;   j=temp; 以上三条单个语句的频度均为1,该程序段的执行时间是一个与问题规模n无关的常数。算法的时间复杂度为常数阶,记作T(n)=O(1)。注意:如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算