下载

下载

第2 章 程 序 性 能

以下是本章中所介绍的有关程序性能分析与测量的概念:

• 确定一个程序对内存及时间的需求。

• 使用操作数和执行步数来测量一个程序的时间需求。

• 采用渐进符号描述复杂性,如 O、 、 、o 。

• 利用计时函数测量一个程序的实际运行时间。

除了上述概念以外,本章还给出了许多应用代码,在后续章节中将可以看到,这些代码有

很多用处。这些应用包括:

• 在一个数组中搜索具有指定特征的元素。本章中所使用的方法是顺序搜索和折半搜索。

• 对数组元素进行排序。本章给出了计数排序、选择排序、冒泡排序及插入排序的实现

代码。

• 采用Horner 法则计算一个多项式。

• 执行矩阵运算,如矩阵加、矩阵转置和矩阵乘。

2.1 引言

所谓程序性能( program performance ),是指运行一个程序所需要的内存大小和时间。

可以采用两种方法来确定一个程序的性能,一个是分析的方法,一个是实验的方法。在进行

性能分析( performance analysis )时,采用分析的方法,而在进行性能测量( p e r f o r m a n c e

m e a s u r e m e n t )时,借助于实验的方法。

程序的空间复杂性(space complexity )是指运行完一个程序所需要的内存大小。对一个程

序的空间复杂性感兴趣的主要原因如下:

• 如果程序将要运行在一个多用户计算机系统中,可能需要指明分配给该程序的内存大小。

• 对任何一个计算机系统,想提前知道是否有足够可用的内存来运行该程序。

• 一个问题可能有若干个内存需求各不相同的解决方案。比如,对于你的计算机来说,某

个C + +编译器仅需要 1 M B的空间,而另一个C + +编译器可能需要4 M B 的空间。如果你的计算机

中内存少于4 M B ,你只能选择1 M B的编译器。如果较小编译器的性能比得上较大的编译器,即

使用户的计算机中有额外的内存,也宁愿使用较小的编译器。

• 可以利用空间复杂性来估算一个程序所能解决的问题的最大规模。例如,有一个电路模

拟程序,用它模拟一个有 c个元件、w个连线的电路需要 2 8 0 K + 1 0 * (c+w )字节的内存。如果

可利用的内存总量为6 4 0 K字节,那么最大可以模拟c+w ≤3 6 K 的电路。

程序的时间复杂性(time complexity )是指运行完该程序所需要的时间。对一个程序的时

间复杂性感兴趣的主要原因如下:

• 有些计算机需要用户提供程序运行时间的上限,一旦达到这个上限,程序将被强制结束。

一种简易的办法是简单地指定时间上限为几千年。然而这种办法可能会造成严重的财政问题,

因为如果由于数据问题导致你的程序进入一个死循环,你可能需要为你所使用的机时付出巨额

资金。因此我们希望能提供一个稍大于所期望运行时间的时间上限。

第2章 程 序 性 能 3 1

下载

• 正在开发的程序可能需要提供一个满意的实时响应。例如,所有交互式程序都必须提

供实时响应。一个需要 1分钟才能把光标上移一页或下移一页的文本编辑器不可能被众多的

用户接受;一个电子表格程序需要花费几分钟才能对一个表单中的单元进行重新计值,那

么只有非常耐心的用户才会乐意使用它;如果一个数据库管理系统在对一个关系进行排序

时,用户可以有时间去喝两杯咖啡,那么它也很难被用户接受。为交互式应用所设计的程

序必须提供满意的实时响应。根据程序或程序模块的时间复杂性,可以决定其响应时间是

否可以接受,如果不能接受,要么重新设计正在使用的算法,要么为用户提供一台更快的

计算机。

• 如果有多种可选的方案来解决一个问题,那么具体决定采用哪一个主要基于这些方案之

间的性能差异。对于各种解决方案的时间及空间复杂性将采用加权的方式进行评价。

练习

1. 给出两种以上的原因说明为什么程序分析员对程序的空间复杂性感兴趣?

2. 给出两种以上的原因说明为什么程序分析员对程序的时间复杂

数据结构 算法与应用C 语言描述第六章,数据结构算法与应用-C语言描述002.pdf相关推荐

  1. 第六章.数据结构与算法基础

    目录 第六章.数据结构与算法基础(重点) 第一节.数组与矩阵 数组 稀疏矩阵 第二节.数据结构的定义 第三节.线性表 链表详解 顺序存储与链式存储对比 队列与栈 第四节.广义表 第五节.树与二叉树 树 ...

  2. c语言第六章数组测试题,计算机二级C语言测试题

    <计算机二级C语言测试题>由会员分享,可在线阅读,更多相关<计算机二级C语言测试题(22页珍藏版)>请在人人文库网上搜索. 1.第一章)1. 以下关于算法的描述不正确的是 .A ...

  3. c语言编程作业最大整数问题,C语言编程第六章作业答案.doc

    C语言编程第六章作业答案 1. 输入两个正整数m和n,求其最大公约数和最小公倍数. 辗除法--辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法. ...

  4. c语言利用循环结构解决密码转换,C语言课件第六章循环结构.ppt

    C语言课件第六章循环结构 第6章 循环结构程序设计 6.1循环结构的组成 循环结构:描述有规律的重复操作问题. 组成:要重复执行的操作,重复执行所需的条件. 例6.1:求10! . 分析:计算1*2* ...

  5. c语言中 if(week == 6,C语言程序设计(第六章).pptx

    C语言程序设计(第六章)课案 第6章 用户定制数据类型及位运算;6.1 结构;6.1.1 概述;1.定义一个结构的一般形式为: struct 结构类型名 { 成员表 }; 成员表由若干个成员组成,每个 ...

  6. c语言作业题五六章答案,C语言程序设计五六章习题和课堂测试答案.doc

    C语言程序设计五六章习题和课堂测试答案 C语言程序设计第四五六章习题和课堂测试答案,还有期末C语言复习例题//3--1矩形面积 #includevoid main(){float a,b;float ...

  7. c语言第六章条件型循环结构,C语言课件(第六章 循环结构)

    C语言课件 第六章 循环结构 在许多复杂的问题中,常常需要做大量的类似的计算处理,这些类似的相同的处理过程存在重复性过程,即在某种条件成立的情况下需要处理相同的操作时,就要使用循环结构来完成. 类似于 ...

  8. AcWing提高算法课Level-3 第六章 基础算法

    AcWing提高算法课Level-3 第六章 基础算法 位运算 AcWing 90. 64位整数乘法761人打卡 递推与递归 AcWing 95. 费解的开关520人打卡 AcWing 97. 约数之 ...

  9. 21Winter\ C语言程序设计第六章

    C语言程序设计 第六章 ​ expr 2.1 #include<stdlib.h> #include<stdio.h> int main(){int i,n;scanf(&qu ...

最新文章

  1. 【转】Flask安装
  2. 网站基于vs,复选框,单选款
  3. vue.js 发布后路径引用问题
  4. 电脑有电流声怎么解决_微星笔记本有电流声或者风扇声怎么办?
  5. Google Mock启蒙篇 [1] (Google C++ Mocking Framework for Dummies 翻译)
  6. ant更改主题色报错Inline JavaScript is not enabled. Is it set in your options? vue ant主题色更改 vue-cli3
  7. 专访合一智芯杨桦:做AI芯片核心技术的底层设计师
  8. SpringBoot2.1.5 (5)---快速构建SpringBoot 项目的两种方式
  9. 【编程珠玑】第十二章 取样问题
  10. GitHub 多次宕机的罪魁祸首竟是 MySQL?
  11. java.net.UnknownHostException 未知的名称或服务
  12. 从零开始搭建物联网平台(三)数模设计
  13. windowns server 2008 R2激活工具(含win7、vista)
  14. Excel批量根据银行卡号查询银行卡的详细信息
  15. 浏览器全屏相关常用代码
  16. 电影《寒战2》中的管理知识
  17. 【网页制作】CSS基本选择器讲解(附讲解视频)
  18. 手机怎么实现图片转文字操作?学会这三招就够了
  19. Android 第五章 TextView
  20. 英国HAWKER叉车蓄电池48V360AH/3PzS360 林德叉车R14电池霍克电瓶

热门文章

  1. arcpy实现空间查询_布隆过滤!Python实现亿级数据集中元素快速查找
  2. iOS 获取Assets中的启动页
  3. 牛客网练习赛44-B(快速幂+模拟)
  4. nginx安全日志分析脚本的编写
  5. EffectKeyMap系列1(Ubuntu)
  6. Mysql—(1)—
  7. Go 语言中手动内存管理
  8. mouseover与mouseenter,mouseout与mouseleave的区别
  9. 更改git bash默认的路径
  10. 加密解密-DES算法和RSA算法