河内塔的复杂度 class

Complexity class of Towers of Hanoi

给出一个问题

Given n print every step it takes to move n disks from rode 1 to rode 2

我需要通过此特定任务确定此问题的复杂性 class。显然不在 P 中,因为很明显这个问题的复杂性是 O(2^n) 并且我们不能做得更好,因为我们必须打印指数大小的输出。我的下一个猜测是 NP 甚至 NP-hard,但我认为这不可能,因为无论算法多么聪明,即使在非行列式机器上,我们也无法在多项式时间内检查指数大小输出。那么,复杂度是多少class?

可以从一开始就确定正确的步骤,而无需通过试错搜索来做出正确的决定。因此这个问题不是decision problem, to which classes such as NP适用的。

这更像是 function problem。时间复杂度确实是由要输出的步数决定的,即2n-1,即O(2n).

相应的class因此是FEXPTIME-Complete,前缀F代表Function Complete 表示它不能在小于指数时间的时间内完成(如 P)。它类似于决策问题的 EXPTIME-Complete class,即 O(2polynomial(n)).

决策问题

你的问题有一个令人困惑的方面:问题陈述是关于打印步骤的,由重申“...确定这个问题的复杂性class” .然而有些短语,你提到 "we can't check the exponential size output in polynomial time"。所以看起来你混合了两个不同的问题:

  1. 为给定的 n 生成(正确的)步骤列表
  2. 验证给定 n 和步骤列表的正确性。

第二个一个决策问题,在那种情况下你会说它在EXPTIME-Complete class.