O(n)空间复杂度究竟意味着什么,它的效率如何?

Bil*_*son 2 sorting algorithm time-complexity space-complexity data-structures

我对O(n)在太空中的含义有了高度的了解.对于具有输入n的算法而言,这意味着某些内容,此算法分配的内存中的附加存储将与n成比例增加.

因此,如果您有一个算法将数字n作为输入,并创建一个大小为2n的数组并填充它将全部为0,则时间复杂度为O(n),空间复杂度为O(n)因为您是创建一个相对于输入大小的数组(附加存储).这种理解是否正确?

其次,O(n)的空间复杂度有多糟糕?像快速排序这样的流行排序算法具有O(n)的最差情况空间复杂度,因此对于任意长数据的排序,O(n)空间复杂度是否可能具有可怕的影响?如果是这样,对于为什么或如何有任何直觉?

das*_*ght 5

大O表示法中的N通常表示输入的大小,而不是传递给算法的值.

O(n)的空间复杂度意味着对于每个输入元素,可以分配多达固定数量的k个字节,即运行算法所需的存储器量在k*N处不比线性增长快.

例如,如果排序算法分配N/2个元素的临时数组,则该算法具有O(n)空间复杂度.

如果没有某些背景,就无法说是好还是坏.在许多情况下,O(N)的空间复杂性是可以接受的,但规则有例外.有时,您会增加内存复杂性以降低时间复杂度(即使用内存支付以获得显着的加速).这几乎被普遍认为是一个很好的权衡.

  • 您很小心地说,您可以为每个输入元素分配最多 k 个字节,但随后又犯了一个错误,说“即调整算法所需的内存量随着 k*N 线性增长”。O 是上限,而不是精确的描述(最多为常数),并且只有最简单的 O(N) 函数是线性的。 (2认同)