Algorithm 数独算法X的时间复杂度是多少?

Algorithm 数独算法X的时间复杂度是多少?,algorithm,time-complexity,sudoku,knuth,Algorithm,Time Complexity,Sudoku,Knuth,我发现数独的时间复杂度为O(N^3),其中N是一个棋盘大小 这可能是合乎逻辑的,因为对于数独来说,要计算的二进制矩阵有N^3行。但这使得数独问题在多项式时间内可解,而数独被称为NP问题,这意味着(据我所知) 不可能总是在多项式时间内求解 可以在多项式时间内验证解决方案 那么数独算法X的时间复杂度是多少, 有没有可能在多项式时间内解出数独 谢谢大家! 很好地解释了这一点: 在n×n的n^2×n^2网格上求解数独难题的一般问题 块是NP完全的 因此,求解数独的任何算法的运行时复杂度至少是n的指数

我发现数独的时间复杂度为O(N^3),其中N是一个棋盘大小

这可能是合乎逻辑的,因为对于数独来说,要计算的二进制矩阵有N^3行。但这使得数独问题在多项式时间内可解,而数独被称为NP问题,这意味着(据我所知)

  • 不可能总是在多项式时间内求解

  • 可以在多项式时间内验证解决方案

那么数独算法X的时间复杂度是多少, 有没有可能在多项式时间内解出数独

谢谢大家!

很好地解释了这一点:

在n×n的n^2×n^2网格上求解数独难题的一般问题 块是NP完全的


因此,求解数独的任何算法的运行时复杂度至少是n的指数。对于普通数独(n=3),这意味着O(n^3)是完全合理的。

有关运行时间的完整分析,请参阅:

据说

即使是最愚蠢的算法X,也最多需要O(3n/3),该算法避免任何回溯的机会,并且总是以最大化运行时间的方式选择其枢轴


如果
n
是3,那么
n
代表什么?为什么它不是一个常数呢?@rici,这里有两个常数:
n=3
是块的大小,
n=n^2=9
是行/列的大小。即使它是一个常数,人们仍然习惯用“O(N^3),其中N=9”这样的术语来谈论时间复杂性@tkrishtop:有时人们会错误地使用术语。有时这些错误是无害的,但有时(如引用的文章中所述)它们会使文本变得毫无意义。在任何情况下都不应效仿它们。该文件中的主张在意义上是错误的或具有误导性的。跳舞链接有很多优点,但它不能使多项式时间算法脱离指数时间算法。@rici对不起,我没有理解你的意思。你是否只想提到“O(N^3),其中N=9”并不优雅,最好说“9^3操作”?或者你不同意它是9^3?@tkrishtop:对于任何有意义的“操作”定义来说,它肯定不是9^3操作。就是这样。DLX需要立方时间的说法是完全错误的,试图说它适用于某个固定的
n
表示完全不理解大O表示法的含义。忘了那张纸,读一本好的教科书。@MooingDuck不,这是虎钳,反之亦然。你说得对,我不知道我在想什么