最新数据结构清华大学课件精要.ppt

  1. 1、本文档共72页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 乘法规则 针对嵌套程序段 T (n, m) = T1 (n) * T2 (m) = O(f (n)*g (m)) 渐进的空间复杂度 S (n) = O(f (n)) 两个并列循环的例子 * void exam (float x[ ][ ], int m, int n) { float sum [ ]; for (int i = 0; i m; i++) { //x中各行 sum[i] = 0.0; //数据累加 for (int j = 0; j n; j++) sum[i] += x[i][j]; } for (i = 0; i m; i++) //打印各行数据和 cout i “ : ” sum [i] endl; } 渐进时间复杂度为 O(max (m*n, m)) * 起泡排序 void bubbleSort (int a[ ], int n ) { //对表 a[ ] 逐趟比较, n 是表当前长度 for (int i = 1; i = n-1; i++) { //n-1趟 for (int j = n-1; j = i; j--) //n-i次比较 if (a[j-1] a[j]) { int tmp = a[j-1]; a[j-1] = a[j]; a[j] = tmp; } //一趟比较 } } * 渐进时间复杂度 O(f (n)*g (n)) = O(n2) BubblrSort 外层循环 n-1 趟 内层循环 n-i 次比较 * 有时, 算法的时间复杂度不仅依赖于问题规模 n,还与输入实例的初始排列有关。 在数组 A[n] 中查找给定值 k 的算法: int i = n-1; while (i = 0 A[i] != k) i--; return i; 算法的语句 i-- 的频度不仅与 n 有关,还与 A[ ] 中各元素的取值以及 k 的取值有关。 * 例:设有两个算法在同一机器上运行,其执行时间分别为 100n2 和 2n,问:要使前者快于后者,n 至少要取多大? 解答: 问题是找出满足 100n2 = 2n 的最小的n。用试探法: n = 13时,100n2 = 16900 2n = 8192 n = 14时,100n2 = 19600 2n = 16384 n = 15时,100n2 = 22500 2n = 32764 取 n = 15 满足要求。 * 出错处理问题举例 试编写一个函数计算 n!*2n 的值,结果存放于数组 A[n] 的第 i 个数组元素中 (0 ? i ? n) 若设计算机中允许的整数的最大值为 maxInt,则当 i arraySize 或者对于某一个 k ( 0 ? k ? n ),使得k!*2k maxInt 时,应按出错处理。 * 可有如下几种不同的出错处理方式: 用 cerr 及 exit (1) 语句来终止执行并报告错误; 用返回整数函数值 0, 1 来实现算法,以区别是正常返回还是错误返回; 在函数的参数表设置一个引用型的整型变量来区别是正常返回还是某中错误返回。 抛出异常。 * #include iostream.h #define n 100 #define maxInt 0x7fffffff bool calc (int T[ ], int n) { int i, value = 1; if ( n != 0 ) { for (i = 1; i n; i++) { value *= i * 2; if (value maxInt / n / 2) return false; } //直接判断 i!*2i MaxInt 是危险的 value *= n * 2; } * T[n] = value; //n!

文档评论(0)

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

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

1亿VIP精品文档

相关文档