【发布时间】:2021-08-24 17:45:53
【问题描述】:
下面的算法是数组中所有元素的总和。
function sumofnumbers(a[],n)
{
sum=0
for(i=0 to n)
sum=sum+a[i]
print(sum)
}
谁能帮我分析一下这个算法。为什么上述算法的空间复杂度是O(n)? 在我看来,这必须是 O(1)。因为我们这里没有考虑任何额外的空间。我们使用给定的空间来计算数组中元素的总和。例如,在某些排序技术中,我们需要额外的数组来对元素进行排序。
据我所知
计算空间复杂度的公式:
Space complexity = Input size + Auxillary space
每个算法都包含它所需/自己的输入大小,即程序执行所需的任何空间。所以我们只需要考虑程序执行所需的额外空间(辅助空间),而不是输入大小来计算空间复杂度。
所以我应用了这个概念是真的吗??
什么时候考虑两个参数(即输入大小和辅助空间)来计算空间复杂度?因为在像 Linear Search 这样的示例中,我看到他们有时没有使用输入大小?
谢谢!!
【问题讨论】:
-
是的,在我看来像 O(N) 时间和 O(1) 空间。
-
空间是 O(N) 因为它需要保存它的输入。想象一下图灵机——程序需要扫描写在磁带上的整个输入。
-
@wcochran:这听起来像是时间复杂度
-
谁说它是线性空间?空间复杂度是图灵机辅助带的复杂度。考虑到输入的大小意味着你永远不会达到亚线性空间复杂度,例如 LOGSPACE。
-
@Jean-BaptisteYunès 你是对的。空间复杂度不考虑输入大小作为处理输入所需内存的一部分...stackoverflow.com/questions/43260889/….
标签: algorithm space-complexity