SUDOKU是完整的吗?

时间:2018-06-05 14:58:06

标签: sudoku np-complete

我确实经历了this

我不明白这一点。

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

2 个答案:

答案 0 :(得分:1)

当N走向无穷大时,您正在分析Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Integer Dim j As Integer If Not Intersect(Target, Range("A:A")) Is Nothing Then On Error Resume Next j = 1 For i = 1 To 50 Worksheets("sheet2").Range("E" & j).Value = Worksheets("sheet1").Range("A" & i).Value Worksheets("sheet2").Range("E" & j + 1).Value = Worksheets("sheet1").Range("A" & i).Value With Worksheets("sheet2").Range("E" & j & ":" & "E" & j + 1) .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter Application.DisplayAlerts = False .merge Application.DisplayAlerts = True End With j = j + 2 Next i End If End Sub 中的问题。但是你输入的问题不随N到无穷大而变化,你有一个有限的上限。这个上限是不变的。

这样做的原因是存在一组有限的解决方案。您可以列出并枚举每个9x9数独。使用已知值作为索引。然后,在预先生成的列表中查找解决方案只是一个恒定时间查找。列表很大,只有它是有限的并不重要。

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

答案 1 :(得分:0)

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

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

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

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

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

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