【发布时间】:2018-06-05 14:58:06
【问题描述】:
【问题讨论】:
-
我投票结束这个问题,因为这是一个更适合 cs.stackexchange.com 的计算复杂性问题,并且与 SO 无关。
标签: sudoku np-complete
【问题讨论】:
标签: sudoku np-complete
正确;任何 9x9 数独都可以在 O(1) 时间内解决(1x1 数独,或 4x4 数独,甚至 1000x1000 数独),因为输入大小是固定的。 NP-completeness 是一个适用于具有可变输入大小的决策问题的概念,因此您可以在输入大小渐近增长时分析算法的运行时间。
区别在于算法是否可以假设输入的大小,或者必须等到它接收输入才能查看它有多大。
输入不必以二进制编码;它只需要使用一些有限大小的字母表。对于固定大小的数独,您可以为每个可能的谜题选择一个具有一个唯一符号的字母表。 (实际上,您可以用二进制编码理论字母表,每个字母符号都有一个固定大小的二进制字符串。这就是 ASCII 的工作方式。输入大小仍然是常数;它只是一个大于 1 的常数。)然后,该算法使用一个硬编码表,将输入字母表中的每个符号与其解决方案配对。解决这个难题的恒定时间算法只是一个查表。
现在考虑谜题不有固定大小的问题。有无限个可能的谜题,所以算法必须 指定一些编码方案,可以使用有限大小的字母来描述无限数量的谜题。这有两个直接后果。
您无法将所有可能输入的解决方案存储在有限的空间中,因此您的算法需要在看到输入后执行实际工作来解决难题。
并非所有输入都具有相同的大小,因为来自有限字母表的固定符号串只能编码有限数量的谜题。一旦输入具有不同的大小,您可以根据输入大小考虑算法必须做的工作量。 (现在只是读取输入是一个 O(n) 操作;解决问题所需的工作可能而且通常更大。)
【讨论】:
n x n 数独。
nxn数独的问题很不一样。
当 N 趋于无穷大时,您正在分析O(N) 中的问题。但是您输入的问题不会随 N 变化到无穷大,您有一个有限的上限。这个上限是恒定的。
这样做的原因是存在一组有限的解决方案。您可以列出和枚举每个 9x9 数独。将所有解决方案索引到以已知输入值作为索引的字典中。找到解决方案只是在预先生成的字典中进行恒定时间查找。列表是否庞大并不重要,重要的是它是有限的。
事实上,另一种解决方案是生成所有可能的数独网格,直到找到一个可以解决输入的问题。乍一看,这似乎是一个线性解决方案,但由于有一个有限的上限,它实际上是一个恒定时间算法。
【讨论】: