第八排序WelcometoTrustedComputingInstitute.ppt

  1. 1、本文档共85页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2. 可读性 算法首先是为了人的阅读与交流,其次才是为了计算机执行。因此,算法应该易于人的理解;另一方面,晦涩难读的程序极易隐藏较多错误而难以调试。 3.健壮性 当输入的数据非法时,算法应当恰当地作出反应或者进行相应处理,而不是产生莫名奇妙的输出结果。另外,处理出错的方法不应是中断程序的执行,而应是返回一个表示错误或错误性质的值,以便在更高的抽象层次上进行处理。 4.高效率与低存储量需求 通常,效率指的是算法执行时间;存储量指的是算法执行过程中所需的最大存储空间。两者都与问题的规模有关。 通常有两种衡量算法效率的方法: 事后统计法 缺点:1. 必须执行程序 2. 其它因素会掩盖算法本质 1.4.3 算法效率的度量 和算法执行时间相关的因素: 1.算法选用的策略 2.问题的规模 3.编写程序的语言 4.编译程序产生的机器代码的质量 5.计算机执行指令的速度 事前分析估算法 一个特定算法的“运行工作量”的大小,只依赖于问题的规模(通常用整数量n表示),或者说,它是问题规模的函数。 算法 = 控制结构 + 原操作 (固有数据类型的操作) 算法的执行时间 = 原操作(i)的执行次数×原操作(i)的执行时间 算法的执行时间 与 原操作执行次数之和成正比 算法时间复杂度的估算 从算法中选取一种对于所研究的问题来说是 基本操作 的原操作,以该基本操作 在算法中重复执行的次数 作为算法运行时间的衡量准则。 例1、求4*4矩阵元素之和 for(i=0; i4; i++) //4+1次 for(j=0; j4; j++) //4(4+1)次 r+=num[i][j]; //原操作,42次 若求n*n矩阵元素之和 for(i=0; in; i++) //n+1次 for(j=0; jn; j++) //n(n+1)次 r+=num[i][j]; //原操作,n2次 整个算法的执行时间与该算法的原操作重复执行的次数n2成正比,记作:T(n)=O(n2) 算法执行时间增长率,简称时间复杂度 Order,表示数量级 一般情况下,原操作重复执行的次数是问题规模(问题大小)n的某个函数f(n)。此例中f(n)= n2 ,所以,算法的时间量度记作:T(n)=O(f(n)) 。 上式表示随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度 (Asymptotic Time Complexity) , 简称时间复杂度。 时间复杂度为O(1)、 O(n) 、O(n2)分别称为常量阶、线性阶、平方阶。 算法的时间复杂度还可能出现的数量级有:立方阶O(n3)、对数阶O(log2 n)、指数阶O(2n)等等。其中: O(1)优于O(log2n)优于O(n)优于O(nlogn)优于O(n2)优于O(n3)优于O(2n)优于O(n!)优于O(nn) 。 {++x; s=0; } for (i=1; i=n; ++i) { ++x; s+=x;} _____ O(1) _____ O(n) for (j=1; j=n; ++j) for (k=1; k=n; ++k) { ++x; s+=x;} int i=1; while ( i=n ) i=i*2; 算法时间复杂度取决于最深层循环内包含基本操作的语句的重复执行次数,称语句重复执行的次数为语句的频度。 _____ O(n2) _____ O(log2n) 例一 两个矩阵相乘 void mult(int a[], int b[], int c[] ) { // 以二维数组存储矩阵元素,c 为 a 和 b 的乘积 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] += a[i, k]*b[k, j]; } //for } //mult 基本操作: 乘法操作 时间复杂度: O(n3) void select_sort(int a[], int n) {

文档评论(0)

boss + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档