📜  “空间复杂性”是什么意思?

📅  最后修改于: 2021-05-04 15:50:45             🧑  作者: Mango

空间复杂度:
在许多地方,术语“空间复杂性”被误用于辅助空间。以下是辅助空间和空间复杂性的正确定义。

辅助空间是算法使用的额外空间或临时空间。

算法的空间复杂度是算法相对于输入大小占用的总空间。空间复杂度包括辅助空间和输入所使用的空间。

例如,如果我们要比较基于空间的标准排序算法,那么辅助空间将是比空间复杂度更好的标准。合并排序使用O(n)辅助空间,插入排序和堆排序使用O(1)辅助空间。所有这些排序算法的空间复杂度均为O(n)。

空间复杂度是时间复杂度的并行概念。如果我们需要创建一个大小为n的数组,则将需要O(n)空间。如果我们创建大小为n * n的二维数组,则将需要O(n 2 )空间。

在递归调用中,堆栈空间也很重要。

例子 :

int add (int n){
    if (n <= 0){
        return 0;
    }
    return n + add (n-1);
}

Here each call add a level to the stack :

1.  add(4)
2.    -> add(3)
3.      -> add(2)
4.        -> add(1)
5.          -> add(0)

Each of these calls is added to call stack and takes up actual memory.
So it take O(n) space.

但是,仅仅因为您总共有n次调用,并不意味着它占用O(n)空间。

看下面的函数:

int addSequence (int n){
    int sum = 0;
    for (int i = 0; i < n; i++){
        sum+ = pairSum(i, i+1);
    }
    return sum;
}

int paiSem(int x, int y){
    return x + y;
}

There will be roughly O(n) calls to pairSum. However, those 
calls do not exist simultaneously on the call stack,
so you only need O(1) space.

注意:必须指出,空间复杂度取决于多种因素,例如编程语言,编译器,甚至是运行算法的机器。