您正在寻找的概念称为枚举复杂度,它是对枚举(列出)问题的所有解决方案(或语言/集合的成员)的计算复杂度的研究。枚举算法可以建模为两个步骤:预计算步骤和带延迟的枚举阶段。这两个步骤都有自己的时间和空间复杂性(也许也有熵)。按照复杂性的一般精神,通常需要在这些之间权衡取舍。
所述预计算步骤进行一些工作将第一溶液列举之前是必要的。这可能涉及找到解决方案本身或初始化一些大型数据结构,这将减少每个解决方案之间的总体延迟。
该延迟是必要的,任意枚举解决方案之间的计算相关的资源成本。换句话说,延迟是产生所需要的空间和时间的量度后溶液我吨ħ之一。每次求解花费O (1 )时间的问题的问题被称为具有恒定的延迟。的一个要求ø (p ø 升ý (Ñ ))的时间被认为具有多项式延迟。我+ 1Ť ^ h一世Ť ^ hO (1 )ø (p Ò 升ÿ(n ))
对于您在问题中特别提到的枚举问题,您应该在Johannes Schmidt的“枚举:算法和复杂性”的第2.1节中研究类及其相关的同级项(在底部链接)。Ëñü中号ñP
我们为什么要关心预计算时间和延迟?
延迟对于理解枚举问题的真正复杂性至关重要。枚举(最大为n)和{ → x:ϕ (→ x)}的元素,其中ϕ (→ x)是一个布尔公式(即SAT)都花费指数时间。但是,通过∑ ∗枚举Σ∗ñ{ x⃗ :ϕ (x⃗ )}φ (X⃗ )Σ *只需要不断的延迟,因为您可以按某种顺序浏览各个元素。就我们所知,枚举3SAT实例的解决方案的延迟可能是指数级的。我们作为复杂性理论家的工作是要弄清为什么后一个问题从根本上比前一个问题更难(更复杂)。延迟在展示这种差异方面做得很好。
同样,我们还需要知道进行了多少预计算。我们可以通过预先计算所有解决方案并将它们存储在以后要枚举的列表中,将任何枚举问题的延迟减少到恒定的时间和空间。挑战在于在两种资源之间找到最佳平衡。
枚举元素的顺序也会影响复杂性。要以指定的排序顺序返回结果,可能需要我们在两个步骤中执行其他计算。当然也可以研究任何顺序都足够的情况(只要每个枚举元素都是唯一的)。
据我所知,这些类通常没有简洁的标签(类似于和N P)。由于枚举复杂性类在3种或更多资源(预计算/总时间,空间,延迟和熵)附近变乱,因此我们不可能期望能够做到这一点。资源界限的组合太多了,无法发出特殊名称。这不会使这些课程变得不那么有趣,也不会阻止研究人员尝试尝试。PñP
资源资源
这项调查(确实是形式化尝试)应该可以帮助您入门。它也证明了一些基本的层次定理。
枚举:算法和复杂性
(Johannes Schmidt,2009年)
https://www.thi.uni-hannover.de/fileadmin/forschung/arbeiten/schmidt-da.pdf
有关枚举复杂性的结果的枚举,请查看由国广邦宏策划的这份汇编。由于按问题类型进行分类,因此您可以轻松找到大量专门用于枚举图形循环的论文。修改涉及的算法以仅考虑给定节点的循环应该很简单。
http://www-ikn.ist.hokudai.ac.jp/~wasa/enumeration_complexity.html