算法的空间复杂度
续上节《--https://www.cnblogs.com/nbk-zyc/p/12293186.html
1 算法的时间复杂度
常见算法的时间复杂度
常见算法的时间复杂度比较:
时间复杂度的案例分析:
1 #include <iostream> 2 3 using namespace std; 4 5 /** 6 * 功能: 查找数组下标并返回 7 * 参数: 8 * a[]: 输入数据 9 * n:数组长度 10 * v:待查找的元素 11 * 返回值:待查找元素的数组下标 12 */ 13 int find(int a[], int n, int v) 14 { 15 int ret = -1; 16 17 for(int i = 0; i < n; i++) // O(n) 18 { 19 if( a[i] == v) 20 { 21 ret = i; 22 break; 23 } 24 } 25 26 return ret; 27 } 28 29 30 31 int main(int argc, char* argv[]) 32 { 33 int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 34 int length = sizeof(arr)/sizeof(int); 35 int min = find(arr, length, 1); // 最好情况,算法执行1次,O(1) 36 int max = find(arr, length, 10); // 最差情况,算法执行10次,O(10) 37 38 return 0; 39 }
结论:一般来说,算法的时间复杂度需要考虑其最坏的情况,因为只有这样,才能满足其最好情况和平均情况。(上节内容都是基于算法的时间复杂度的最坏情况考虑的)
2 算法的空间复杂度(Space Complexity)
1) 定义:
对一个算法在运行过程中临时占用存储空间大小的度量,记作 S(n) = S(f(n)) --- 可以使用 算法的时间复杂度 来估算 算法的空间复杂度(内存分配)
n: 问题规模
f(n):空间使用函数, 与 n 有关
2)代码展示:
1 // sum1() 空间复杂度 = n+4 2 long sum1(int n) // 1 3 { 4 long ret = 0; // 1 5 int* array = new int[n]; // n 6 7 for(int i=0; i<n; i++) // 1 8 { 9 array[i] = i + 1; 10 } 11 12 for(int i=0; i<n; i++) // 1 13 { 14 ret += array[i]; 15 } 16 17 delete[] array; 18 19 return ret; 20 }