一、算法的时间复杂度
1、基本概念
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),整个算法的执行时间与该基本操作重复执行的次数城正比。随着问题规模的增大,算法 执行时间的增长率与和f(n)的增长率相同,称作算法的 渐近时间复杂度(asymptotic time complexity),简称 时间复杂度。
2、时间复杂度的表示
时间复杂度表示为 T(n) = O(f(n)),其中n表示问题规模。
3、时间复杂度的常见分类
- 常数阶 O(1)
- 对数阶 O(log2n)
- 线性阶 O(n)
- 线性对数阶 O(nlog2n)
- 平方阶 O(n^2)
- 立方阶 O(n^3)
- k次方阶 O(n^k)
- 指数阶 O(2^n)
4、示例
例1:常数阶
T(n) = O(1){ x++; }
例2:线性阶:
for (int i = 0 ; i < n ; i++) { x++; }
T(n) = O(n)
例3:平方阶
T(n) = O(n^2)//冒泡算法 for (int i = 0 , change = true ; i < n ; i++) { change = false; for (int j = 0 ; j < n - i - 1 ; j++) { if (a[j] > a[j + 1]) { a[j] <--> a[j + 1]; change = true; } } }
例4:时间推算
若两个10 * 10 矩阵运算耗时12ms,则又时间算法复杂度T(n) = O(n^3),两个31 * 31的矩阵相乘耗时为(31^3/10^3) * 12ms = 358ms
二、算法的空间复杂度
1、基本概念
算法的 空间复杂度是指运行完该算法的实现代码所需内存大小。
2、空间复杂度的表示
空间复杂度表示为 S(n) = O(f(n)),其中n表示问题规模。