答案 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的工作方式。输入大小仍然是常数;它只是一个更大的常量然后,算法使用硬编码表,将输入字母表中的每个符号与其解决方案配对。解决难题的恒定时间算法只是一个表查找。
现在考虑谜题不具有固定大小的问题。有一个无限个可能的谜题,所以算法必须 指定一些编码方案,可以使用有限大小的字母表描述无数个谜题。这有两个直接后果。
您无法在有限的空间内将解决方案存储到所有可能的输入中,因此您的算法在看到输入后需要进行实际工作以解决难题。
并非所有输入都具有相同的大小,因为来自有限字母表的固定符号串只能编码有限数量的谜题。一旦输入具有不同的大小,您可以考虑算法需要做多少工作作为输入大小的函数。 (只是读取输入现在是一个O(n)操作;解决问题所需的工作可能并且通常更大。)