基本数据结构数据结构2绪论续.pptVIP

  • 2
  • 0
  • 约8.18千字
  • 约 39页
  • 2021-04-04 发布于北京
  • 举报
第*页 事后统计 一个高级语言程序在计算机上运行所消耗的时间取决于: ?依据的算法选用何种策略 ?问题的规模 ?程序语言 ?编译程序产生机器代码质量 ?机器执行指令速度 同一个算法用不同的语言、不同的编译程序、在不同的计算机上运行,效率均不同,——所以使用绝对时间单位衡量算法效率不合适 第*页 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,算法的时间量度记作 T(n)=O(f(n)) f(n) ---T(n)的数量级 称作算法的渐近时间复杂度。 2. 事前分析估计(撇开软硬件有关因素的估计方法) 频度T(n) :是指语句重复执行的次数 f(n) –关于问题规模的某个函数,表示T(n)的数量级,只与问题规模(可能由多个变量表示)有关, 一般表示为问题规模的指数或对数,没有常数项! 例如:1、nx、 xn、 logxn等 第*页 知道T(n) 如何求f(n)呢? 例1: T(n)=3n+2=O(n) T(n)=100n+6=O(n) T(n)= 10n2+4n+2=O(n2) T(n)= 6*2n+n2=O(2n) 第*页 定理:若T(n)=a m n m +a m-1 n m-1 +…+a1n+a0是一个m次多项式,则T(n)=O(n m) 例2、for(i=1;i=n;++i)     for(j=1;j=n;++j) {++x;s+=x;} 语句频度为:2n2 其时间复杂度为:O(n2) 即时间复杂度为平方阶。 第*页 例3: n*n矩阵相乘 for(i=1;i=n;i++) for(j=1;j=n;j++) { c[i][j]=0; for(k=1;k=n;k++) c[i][j]=c[i][j]+a[i][k]*b[k][j]; } 第*页 例4、估计下列程序段的算法复杂度 for(i=1;i=n;++i)     for(j=1;j=n;++j) for(k=1;k=n;++k) {++x;s+=x;} for(i=1;i=n;++i)     for(j=1;j=n;++j) {++x;s+=x;} 求最大指数次数 算法的时间复杂度是由最深层嵌套语句的频度决定的。 第*页 例5:分析以下程序段的时间复杂度。 i=1; ① while(i=n) i=i*2; ② 该算法的运行时间由程序中所有语句的频度(即该语句重复执行的次数)之和构成。 解: 分析:显然,语句①的频度是1。设语句2的频度是x,则有: 即x≤log2n,取最大值x=log2n 所以该程序段的频度为: T(n)= 1+x=1+ log2n 时间复杂度T(n)= O( log2n) 第*页 例6:分析以下程序段的时间复杂度。 for(j=0;j=n;j++) for(k=0;kj;k++) s+=i*k*j; 解: 所以该程序段的频度为: T(n)= n(n+1)/2 时间复杂度T(n)= O( n2) 第*页 以下六种计算算法时间的多项式是最常用的。其关系为: O(1)O(log2n)O(n)O(nlog2n) O(n2)O(n3) 指数时间的关系为: O(2n)O(n!)O(nn) 当n取得很大时,指数时间算法和多项式时间算法在所需时间上非常悬殊。P18 小知识:NP(nondeterministic polynomial)难问题是指算法复杂度难以用多项式表示的问题,算法复杂度通常是n的指数级,常规算法很难求解。 第*页 有的情况下,算法中基本操作重复执行的次数还随问题的输入数据集不同而不同。大O表示法一般是指最差情况的计算复杂度。例如: Void bubble-sort(int a[],int n) { for(i=n-1;

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档