数据结构与算法-空间复杂度

309 阅读1分钟

程序空间计算的因素

  1. 寄存器本身的指令。
  2. 常数。
  3. 变量。
  4. 输入。
  5. 对数据进行操作的辅助空间。

我们在考量算法的空间复杂度时,主要考量算法执行时所需要的辅助空间。

问题: 数组逆序,将一维数组a中的n个数逆序存放在原数组中.

int n = 5;
int a[10] = {1,2,3,4,5,6,7,8,9,10};
//算法实现
int temp;
for(int i = 0; i < n/2 ; i++){
    temp = a[i];
    a[i] = a[n-i-1];
    a[n-i-1] = temp;
}

for(int i = 0;i < 10;i++)
{
    printf("%d\n",a[i]);
}

这段代码使用到的辅助空间是有一个temp,为常数阶,所以他的空间复杂度为O(1)

int n = 5;
int a[10] = {1,2,3,4,5,6,7,8,9,10};

int b[10] = {0};
for(int i = 0; i < n;i++){
    b[i] = a[n-i-1];
}
for(int i = 0; i < n; i++){
    a[i] = b[i];
}
for(int i = 0;i < 10;i++)
{
    printf("%d\n",a[i]);
    
}

这段代码使用一个数组的辅助空间先把一个数组中的元素倒序存入一个新的数组中,新的数组所开辟的空间大小是原数组的空间大小。如果原数组中数组元素的个数为n个,那么它就需要开辟n个辅助空间,所以这段代码的空间复杂度为O(n)