时间复杂度
语句总的执行次数 T(n) 是关于问题规模 n 的函数
大O记法
,f(n)为问题规模n的某个函数
- 常数阶:
- 线性阶:
- 平方阶:
推导大O阶时间复杂度
- 把加法常数项改为1;
- 在修改后的运行次数函数中,只保留最高阶项。
- 如果最高阶项存在且不是1,则去除与这个项相乘的常数。
纯分支结构时间复杂度为O(1):无论真或假执行次数恒定,与问题大小无关
实例:
int i, j;
for (i = 0; i < n; i++)
{
for (j = i; j < n; j++)
{
/* 时间复杂度为O(1)的程序步骤序列 */
}
}
总执行次数:
- 没有加法常数不予考虑;
- 只保留最高阶项,因此保留;
- 去除这个项相乘的常数,也就是去除,最终这段代码的时间复杂度为
常见时间复杂度
常用的时间复杂度所耗费的时间从小到大依次是:
空间复杂度
计算算法所需的存储空间
,n为问题的规模,f(n)为语句关于n所占存储空间的函数
一个程序在机器上执行时,除了需要存储程序本身的指令、常数、变量和输入数据外,还需要存储对数据操作的存储单元
若算法执行时所需的辅助空间相对于输入数据量而言是个常数,则称此算法为原地工作,空间复杂度为O(1)