📅  最后修改于: 2021-01-12 03:31:03             🧑  作者: Mango
在本章中,我们将讨论关于算法所需空间量的计算问题的复杂性。
空间复杂度具有许多时间复杂度特征,并且可以作为根据问题的计算难度对问题进行分类的另一种方式。
空间复杂度是一种函数,它根据算法的输入量来描述算法占用的内存(空间)量。
我们经常说需要额外的内存,没有计算存储输入本身所需的内存。同样,我们使用自然的(但固定长度)单位来度量。
我们可以使用字节,但是更容易使用,例如,使用的整数数量,固定大小的结构数量等。
最后,我们提供的函数将独立于表示该单元所需的实际字节数。
有时会因为使用的空间极小和/或明显而忽略空间复杂度,但是有时它与时间复杂度一样重要
令M为确定性的图灵机(TM) ,该机停止所有输入。 M的空间复杂度是函数$ f \冒号N \ rightarrow N $,其中f(n)是磁带的最大单元数, M扫描长度为M的任何输入。如果M的空间复杂度为f(n) ,则可以说M在空间f(n)中运行。
我们使用渐近符号来估计图灵机的空间复杂度。
令$ f \冒号N \ rightarrow R ^ + $为一个函数。空间复杂度类可以定义如下-
空格= {L | L是由O(f(n))空间确定性TM决定的语言
空格= {L | L是由O(f(n))空间不确定TM决定的语言
PSPACE是在确定性图灵机上的多项式空间中可确定的语言类别。
换句话说, PSPACE = U k SPACE(n k )
Savitch定理是与空间复杂性相关的最早定理之一。根据该定理,确定性机器可以通过使用少量空间来模拟非确定性机器。
对于时间复杂性,这种模拟似乎需要时间成指数增长。对于空间复杂度,该定理表明,使用f(n)空间的任何非确定性图灵机都可以转换为使用f 2 (n)空间的确定性TM。
因此,Savitch定理指出,对于任何函数,$ f \冒号N \ rightarrow R ^ + $,其中$ f(n)\ geqslant n $
NSPACE(f(n))⊆SPACE(f(n))
下图描述了不同复杂度类别之间的关系。
到目前为止,在本教程中我们还没有讨论P和NP类。这些将在后面讨论。