目录
1 什么是程序性能
所谓程序性能(performance of a program)是指运行这个程序所需要的内存和时间的多少。
一个程序的空间复杂度(space complexity)是指该程序的运行所需内存的大小。
一个程序的时间复杂度(time complexituy)是指运行程序所需要的时间。
2 空间复杂度
2.1 空间复杂度的组成
程序所需要的空间主要由以下部分构成:
(1)指令空间:指编译之后的程序指令所需要的存储空间。
指令空间的数量取决于如下因素:
- 把程序转换成机器代的编译器
- 在编译时的编译器选项
- 目标计算机
(2)数据空间:指所有常量和变量值所需要的存储空间。
它由两个部分构成:
- 常量和简单变量所需要的存储空间。
- 动态数组和动态类实例等动态对象所需要的空间。
类型 | 32位系统中(字节数 Byte) | 64位系统中(字节数 Byte) | 范围 |
bool | 1 | 1 | {true, false} |
char | 1 | 1 | [-128, 127] |
usigned char | 1 | 1 | [0, 255] |
short | 2 | 2 | [-32768, 32767] |
usigned short | 2 | 2 | [0, 65535] |
long | 4 | 8 | [–2147483648, 2147483647] |
usigned long | 4 | 8 | [0, 4294967295] |
int | 4 | 4 | [–2147483648, 2147483647] |
usigned int | 4 | 4 | [0, 4294967295] |
float | 4 | 4 | ±3.4E±38(7位) |
double | 8 | 8 | ±1.7E±308(15位) |
pointer | 4 | 8 |
|
(3)环境栈空间:用来保存暂停的函数和方法在恢复运行时所需要的信息。
每当一个函数被调用时,下面的数据被保存在环境栈中:
- 返回地址
- 正在调用的函数的所有局部变量的值以及形式参数的值(仅对递归函数而言)。
实例特征:程序要处理的问题实例都有一些特征,这些特征都包含着可以决定程序空间的因素(例如,输入和输出的数量或相关数的大小)。
3 时间复杂度
3.1 时间复杂度的组成
一个程序P所需要的时间是编译时间和运行时间之和。编译时间与实例特征无关。运行时间通常用“t(p)(实例特征)”来表示。
(1)操作计数:选择一种或多种关键操作,然后确定每一种操作的执行次数。
(2)最好、最坏和平均操作计数:操作计数不总是由实例特征唯一确定时,可以估算最好、最坏和平均操作计数进行分析。
(3)步数:一个程序步可以大概定义为一个语法或语义上的程序片段,该程序片段独立于实例特征。