空间复杂度

来自testwiki
跳转到导航 跳转到搜索

Template:NoteTA计算机科学中,一个算法程序空间复杂度定性地描述该算法或程序运行所需要的存储空间大小。空间复杂度是相应Template:Tsl输入值的长度的函数,它表示一个算法完全执行所需要的存储空间大小。[1]

时间复杂度类似,空间复杂度通常也使用大O记号渐进地表示,例如O(n)O(nlogn)O(nα)O(2n)等;其中Template:Mvar用来表示输入的长度,该值可以影响算法的空间复杂度。

就像时间复杂度的计算不考虑算法所使用的空间大小一样,空间复杂度也不考虑算法运行需要的时间长短。

空间复杂度类

复杂度类是渐进复杂度相同的一类问题的集合。与时间复杂度类DTIME(f(n))NTIME(f(n))相似,空间复杂度类Template:TslNSPACE(f(n))分别表示可以被确定型非确定型图灵机上使用O(f(n))大小的空间可以决定语言的集合。此外,与PNP类似,如果令f可以是任意多项式,就得到复杂度类PSPACENPSPACE。具体的定义为

𝖯𝖲𝖯𝖠𝖢𝖤=c+𝖣𝖲𝖯𝖠𝖢𝖤(nc)

𝖭𝖯𝖲𝖯𝖠𝖢𝖤=c+𝖭𝖲𝖯𝖠𝖢𝖤(nc)

复杂度类之间的关系

根据空间层次定理,对于任意的空間可構函數f(n),总存在这样一个问题,它可以被一个图灵机使用f(n)存储空间求解,但不能被任何图灵机用渐进少于f(n)的存储空间求解。

以下复杂度类之间的包含关系是成立的[2]

𝖣𝖳𝖨𝖬𝖤(f(n))𝖣𝖲𝖯𝖠𝖢𝖤(f(n))𝖭𝖲𝖯𝖠𝖢𝖤(f(n))𝖣𝖳𝖨𝖬𝖤(2O(f(n)))

另外,根据萨维奇定理,如果fΩ(log(n)),则

𝖭𝖲𝖯𝖠𝖢𝖤(f(n))𝖣𝖲𝖯𝖠𝖢𝖤((f(n))2).

上边结果的一个直接推论是𝖯𝖲𝖯𝖠𝖢𝖤=𝖭𝖯𝖲𝖯𝖠𝖢𝖤。这个推论意味着对于一个问题而言,非确定性可以为图灵机节省的存储空间是相当有限的。作为对比,在时间复杂度理论中,Template:Tsl猜想,对于时间复杂度而言,非确定型和确定型空间复杂度类之间的差距可能是指数级的。

根据Template:Tsl,对于fΩ(log(n))𝖭𝖲𝖯𝖠𝖢𝖤(f(n))Template:Tsl操作下闭合(即若一个语言A𝖭𝖲𝖯𝖠𝖢𝖤(f(n)),则其反语言Ac={x|x∉A}也在𝖭𝖲𝖯𝖠𝖢𝖤(f(n))中)。这可能意味着空间和时间复杂度类在复杂度类关系上的另一个差别,因为一般认为非确定空间复杂度类在取反操作下不闭合,例如有猜想NP≠co-NP[3][4]

对数空间复杂度类

对数空间复杂度类L(或写作LOGSPACE)是指确定性图灵机相对于输入n仅需O(logn)存储空间就可以解决的问题的集合。考虑到一个最大取值为输入大小的计数器也需要n二进制位,也即logn的存储空间;LOGSPACE中的一个算法至多只能使用常数个计数器或其它复杂度相同的变量。

LOGSPACE以及其它次线性空间复杂度的算法在处理输入大到存不进计算机的随机存取存储器的问题时很有用。解决这类问题的算法包括Template:Tsl;但次线性空间复杂度只考虑所需要的存储空间,而数据流算法同时还要考虑输入数据要怎样被送入算法中。 此复杂度类的算法在伪随机性Template:Tsl中也有应用,当前的相关开放问题包括L = RL是否成立。[5][6]

与L对应的非确定性空间复杂度类是NL

辅助空间复杂度

术语辅助空间是指除被输入数据占据的空间之外使用的存储空间。 因此,可以用以下方式来定义辅助空间复杂度:考虑一台拥有两条纸带的图灵机,其中一条“输入带”只能读不能写,另一条一般的纸带则可读可写。 则辅助空间复杂度只分析第二条纸带(即作业纸带,working tape)上的空间使用情况。 例如,对于平衡二叉树深度优先搜索算法,若二叉树有n个节点,则其辅助空间复杂度是Θ(logn)

参见

参考资料

Template:Reflist

Template:复杂度类