【发布时间】:2015-07-25 01:32:43
【问题描述】:
如果我有这样的功能,我基本了解:
int sum(int x, int y, int z) {
int r = x + y + z;
return r;
}
参数需要 3 个单位的空间,局部变量需要 1 个空间,这永远不会改变,所以这是O(1)。
但是如果我有这样的功能呢:
void add(int a[], int b[], int c[], int n) {
for (int i = 0; i < n; ++i) {
c[i] = a[i] + b[0]
}
}
a 需要 N 个单位,b 需要 M 个单位,c 需要 L 个单位,i 和 n 需要 1 个单位。所以它需要N+M+L+1+1 的存储量。
那么这里的空间复杂度大 O 会是什么?需要更高内存的那个?
IE。如果 N 比 M 和 L 花费更多的时间(从更高的意思来看,假设大于 10**6) - 那么可以肯定地说空间复杂度是 O(N) 还是不像我们对时间复杂度所做的那样?
但是如果所有三个,即a,b,c都没有太大的不同
喜欢这个功能
void multiply(int a[], int b[], int c[][], int n) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
c[i] = a[i] + b[j];
}
}
}
那么空间复杂度是多少? O(N+M+L)?还是最大的?
【问题讨论】:
-
当我们谈到空间复杂度时,通常我们指的是需要辅助空间——而不是输入本身的空间。
-
空间复杂度包括辅助空间和输入使用的空间。对吗?
-
@AnkurAnand 从技术上讲,是的。但许多人使用该术语仅表示辅助空间复杂度。具体来说,您想知道诸如“如果我通过 100 个函数传递这个大型数据集,我会占用多少内存,我会创建多少垃圾?”
标签: algorithm space-complexity