002程序性能2技术总结.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * 因为3n+2=O(n2)且3n+2≠Ω(n2),所以3n+2=o(n2) 。 例子 * * 一些常用的有关O,Ω和Θ的标记 * * 关于和与积的有用的引用规则 * * 矩阵运算 折半搜索(Binary search) 排列、插入排序 2.4.6Complexity Analysis Examples * * 递推求和 * * 递归求和 * * 矩阵加法 * * 矩阵转置 * * 顺序搜索 tSequentialSearch(n)=Ω (1) tSequentialSearch(n)=Ω (n) 图2-22函数SequentialSearch(程序2-1)的渐进复杂性 * * 假定m=n-1。 当k=m时,所需要的时间为Θ(n)。 当km时,将执行else语句,此时,for循环将被执行m-k+1次。由于每次循环所花费的时间为Θ(tPerm(k+1,m)),因此,当km时,tPerm(k,m)= Θ((m-k+1)tPerm(k+1,m))。使用置换的方法,可以得到: tPerm(0,m)= Θ((m+1)*(m+1)!)= Θ(n*n!),其中n≥1。 排列 * * 搜索过程从x 与数组[left:right]中间元素的比较开始。 如果x等于中间元素,则查找过程结束。 如果x小于中间元素,则仅需要查找数组的左半部分,所以right 被修改为middle - 1。 如果x大于中间元素,则仅需要在数组的右半部分进行查找,left 将被修改为middle + 1。 折半搜索 * * [05 13 19 21 37 56 64 75 80 88 92] [05 13 19 21 37] 56 64 75 80 88 92 05 13 19 [21 37] 56 64 75 80 88 92 查找K=21的过程(查找成功) * * [05 13 19 21 37 56 64 75 80 88 92] 05 13 19 21 37 56 [64 75 80 88 92] 05 13 19 21 37 56 64 75 80 [88 92] 查找K=85的过程(查找失败) 05 13 19 21 37 56 64 75 80] [88 92 * * templateclass T int BinarySearch(T a[], const T x, int n) {// 在a[0] = a[1] = ... = a[n-1 ]中搜索x // 如果找到,则返回所在位置,否则返回- 1 int left = 0; int right = n-1 ; while (left = right) { int middle = (left + right)/2; if (x == a[middle]) return middle; if (x a[middle]) left = middle + 1; else right = middle-1 ; } return -1; // 未找到x } 折半搜索 * * While的每次循环(最后一次除外)都将以减半的比例缩小搜索的范围,所以该循环在最坏情况下需执行Θ(logn)次。 由于每次循环需耗时Θ(1),因此在最坏情况下,总的时间复杂性为Θ(logn)。 折半搜索性能 * * 可以利用复杂性函数对两个执行相同任务的程序P和Q进行比较。 假定程序P具有复杂性Θ(n),程序Q具有复杂性Θ(n2),可以断定,对于“足够大”的n,程序P比程序Q快。 2.5 Practical Complexities * * 函数的值 * * 函数曲线 * * 建议 从图中可以看出,随着n的增长,2n的增长极快。事实上,如果程序需要2n执行步,那么当n=40时,执行步数将大约为1.1*1012。在一台每秒执行1000000000步的计算机中,该程序大约需要执行18.3分钟;如果n=50,同样的程序在该台机器上将需要执行13天,当n=60时,需要执行310.56年;当n=100时,则需要执行4*1013年。因此可以认定,具有指数复杂性的程序仅适合于小的n(典型地取n≤40)。 * * 建议 具有高次多项式复杂性的函数也必须限制使用。 例如,如果程序需要n10执行步,那么当n=10时,每秒执行1000000000步的计算机需要10秒钟;当n=100时,需要3171年;n=1000时,将需要3.17*1013年。 如果程序的复杂性是n3,则当n=10

文档评论(0)

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

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

1亿VIP精品文档

相关文档