2.1什么是程序性能
program performance:程序性能 performance analysis:性能分析
performance measurement:性能测量
space complexity:时间复杂度 time complexity:空间复杂度
2.2空间复杂度
instruction space:指令空间---编译器的覆盖选项
data space:数据空间
environment stack space:环境栈空间 recursion stack space:递归栈空间 tail recursion:尾递归
1.当一个函数被调用时,下面的数据将会保存在环境栈中:
(1).返回地址
(2).正在调用的函数的所用局部变量的值以及形式参数的值(仅对递归函数而言,有些编译器会统一处理)
2.任意程序P所需的空间可以表示为:
c+Sp(实例特征)
c:固定部分,为常量,代表instruction space 与 data space中的常量与简单变量
Sp:可变部分,data space中的动态分配空间与环境栈中的递归栈组成
2.3时间复杂度
step-count:步数 a step:一步 a program step:一个程序步 recurrence equation:递推方程
s/e:一条语句的执行步数 frequency:频率 profiling:剖析法
1.一个程序P所需要的时间是编译时间和运行时间之和。编译时间与实例特征无关,所以此处只考虑运行时间。
2.运行时间通常用tp(实例特征)来表示。
3.利用Horner法则的分解式计算一个多项式如下:
P(x)=(…(Cn*x+Cn-1)*x+Cn-2)*x+Cn-3)*x…)*x+C0
4.选择排序:每次将未排序部分最大(最小)的数与未排序部分最后一个(第一个)数交换。
及时终止的选择排序:在选择排序中加入布尔变量在选择最大值时同时判断数组是否已经有序。
5.冒泡排序:将未排序部分从头开始相邻两个数比较,前者比后者大则交换。
及时终止的冒泡排序:在冒泡排序中加入布尔变量,若某次冒泡过程没有交换则表明数组已经有序。
6.插入排序:不断将无序部分的元素插入到有序部分。最少比较次数为n-1,最大比较次数为n*(n-1)/2。
7.操作计数和步数都是实例特征的函数。