Computer science 这意味着什么:O(n)步和O(1)空间?

Computer science 这意味着什么:O(n)步和O(1)空间?,computer-science,Computer Science,O(1)空间是什么意思?我理解O(n)步数就像一个算法/程序进行计算的数量级,但不知道O(n)空间是什么。O(1)空间意味着算法所需的内存是恒定的,即不依赖于输入的大小 O(n)空间意味着算法所需的内存(在最坏的情况下)与输入的大小具有相同的数量级 编辑: 增加两个例子: Bubblesort需要0(1)个空间 合并排序需要O(n)个空间 本质上,“O(n)步数和O(1)空间”意味着算法执行的步数与项目数成线性比例(O(n)),但它占用的内存量是恒定的。因此,基本上递归调用通常是O(n)空间,

O(1)空间是什么意思?我理解O(n)步数就像一个算法/程序进行计算的数量级,但不知道O(n)空间是什么。

O(1)空间意味着算法所需的内存是恒定的,即不依赖于输入的大小

O(n)空间意味着算法所需的内存(在最坏的情况下)与输入的大小具有相同的数量级

编辑: 增加两个例子:

  • Bubblesort需要0(1)个空间
  • 合并排序需要O(n)个空间

本质上,“O(n)步数和O(1)空间”意味着算法执行的步数与项目数成线性比例(O(n)),但它占用的内存量是恒定的。

因此,基本上递归调用通常是O(n)空间,迭代过程是O(1)由于您没有等待递归调用完成,因此添加了两个常见示例。嗯,你不能真正找到关于递归与迭代算法复杂度的一般规则(但递归算法要有O(1)空间复杂度可能很难——如果不是不可能的话)。如果你的递归调用每次调用都使用新变量,那么是的,它将是O(n)空间。如果您的迭代过程在循环中实例化了新变量而没有释放,那么它也将是O(n)。这完全取决于您如何设计和编写算法。@Nikhil:实际上,递归调用总是为激活记录占用空间,因此即使您没有局部变量,复杂性也不会是O(1)。当然,除非您使用尾部递归。如果你有一个没有局部变量的尾部递归函数,那么它将是O(1)空间。