算法复杂度
算法分析
➢ 同一算法用不同语言实现,用不同编译器,或是在不同计算机上运行,效率均不同
➢ 使用绝对时间衡量算法效率不合适
➢ 基本操作重复执行的次数作为算法的时间度量
判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注主项(最高阶项)的阶数
算法复杂度的记法
➢ 定义:
• 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析
T(n)随n的变化情况,并确定T(n)的数量级。
• 算法的时间复杂度,记作:T(n)=O(f(n))。表示随问题规模n的增大,算法执行时
间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。
• 其中f(n)是问题规模n的某个函数。
➢ 用大写O()来体现算法时间复杂度的记法,称之为大O记法。
➢ O(1)为常数阶,O(n)为线性阶,O(n^2)为平方阶。
算法的时间复杂度
- 常数阶:只有执行次数的差异,跟问题规模n的取值无关,所以为O(1)时间复杂度
- 线性阶:O(n)
- 对数阶:O(logn)
- 平方阶:O(n^2),O(mn)
EXAMPLE
- 嵌套循环
int i, j;
for (i = 0; i < n; i++) {
for (j = i; j < n; j++) { // 注意 j = i 而不是0
// 时间复杂度为O(1)的程序步骤序列
}
}
时间复杂度为O(n^2)
常见的算法时间复杂度
算法的空间复杂度
➢ 算法的空间复杂度通过计算算法所需的存储空间实现,记作S(n)=O(f(n)),
其中n为问题的规模,f(n)为语句关于n所占存储空间的函数。
• 可以理解为函数内局部变量的空间
➢ 若算法执行时所需的辅助空间相对于输入数据量而言是个常数,则称此算法的空间复杂度为O(1)。
标签:函数,记法,--,复杂度,算法,时间,常数 From: https://www.cnblogs.com/michaelyeung/p/18304620