【问题标题】:Is SUDOKU np-complete? [closed]数独 np 完整吗? [关闭]
【发布时间】:2018-06-05 14:58:06
【问题描述】:

我确实通过this

我不明白。

数独在推广到 n 时是 NP 完全的 × 然而,n 网格 标准 9 × 9 数独是 不是 NP- 完成。

【问题讨论】:

  • 我投票结束这个问题,因为这是一个更适合 cs.stackexchange.com 的计算复杂性问题,并且与 SO 无关。

标签: sudoku np-complete


【解决方案1】:

正确;任何 9x9 数独都可以在 O(1) 时间内解决(1x1 数独,或 4x4 数独,甚至 1000x1000 数独),因为输入大小是固定的。 NP-completeness 是一个适用于具有可变输入大小的决策问题的概念,因此您可以在输入大小渐近增长时分析算法的运行时间。

区别在于算法是否可以假设输入的大小,或者必须等到它接收输入才能查看它有多大。

输入不必以二进制编码;它只需要使用一些有限大小的字母表。对于固定大小的数独,您可以为每个可能的谜题选择一个具有一个唯一符号的字母表。 (实际上,您可以用二进制编码理论字母表,每个字母符号都有一个固定大小的二进制字符串。这就是 ASCII 的工作方式。输入大小仍然是常数;它只是一个大于 1 的常数。)然后,该算法使用一个硬编码表,将输入字母表中的每个符号与其解决方案配对。解决这个难题的恒定时间算法只是一个查表。

现在考虑谜题有固定大小的问题。有无限个可能的谜题,所以算法必须 指定一些编码方案,可以使用有限大小的字母来描述无限数量的谜题。这有两个直接后果。

  1. 您无法将所有可能输入的解决方案存储在有限的空间中,因此您的算法需要在看到输入后执行实际工作来解决难题。

  2. 并非所有输入都具有相同的大小,因为来自有限字母表的固定符号串只能编码有限数量的谜题。一旦输入具有不同的大小,您可以根据输入大小考虑算法必须做的工作量。 (现在只是读取输入是一个 O(n) 操作;解决问题所需的工作可能而且通常更大。)

【讨论】:

  • 按照这个逻辑,NP-完全问题的任何特定实例都是 O(1),因此它们都是多项式?
  • 不,因为可以解决专门 9x9 数独的算法无法解决任意n x n 数独。
  • 您必须准确说明您声称要解决的问题。解决9x9数独的问题和解决nxn数独的问题很不一样。
  • 不,n x n 数独的一般问题是NP完全的。仅仅因为算法在恒定时间内运行并不意味着它很快。它只是意味着它不随输入大小而变化,并且输入大小不能变化的算法通常是一个常数时间算法。
  • 数独可以转化为一个N​​P完全问题。数独本身可以通过一组简单的技术来解决,这些技术可以很容易地编码成一个小的 Python 程序,并且几乎可以立即解决。这实际上取决于规则,因为 9x9 对每个 3x3 方格都有限制,并使用 1 到 9 的数字。因此,在 9x9 之外,您需要定义什么是数独。但是 9x9 肯定不是 NP 完整的,几乎所有问题都可以通过一些基本的一阶逻辑来解决,其中一些需要单个递归排除搜索。在这样的转换之前,泛化需要明确的定义
【解决方案2】:

当 N 趋于无穷大时,您正在分析O(N) 中的问题。但是您输入的问题不会随 N​​ 变化到无穷大,您有一个有限的上限。这个上限是恒定的。

这样做的原因是存在一组有限的解决方案。您可以列出和枚举每个 9x9 数独。将所有解决方案索引到以已知输入值作为索引的字典中。找到解决方案只是在预先生成的字典中进行恒定时间查找。列表是否庞大并不重要,重要的是它是有限的。

事实上,另一种解决方案是生成所有可能的数独网格,直到找到一个可以解决输入的问题。乍一看,这似乎是一个线性解决方案,但由于有一个有限的上限,它实际上是一个恒定时间算法。

【讨论】:

    猜你喜欢
    • 2010-12-16
    • 2021-12-10
    • 2011-10-18
    • 2017-09-19
    • 2012-01-06
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多