SUDOKU 是 np 完全的吗?
Is SUDOKU np-complete?
我确实经历了。
我不明白这个。
数独泛化为 n 时是 NP 完全的
×
然而 n 网格
一个标准的 9
×
9
数独是
不是
NP-
完成。
正确;任何 9x9 数独都可以在 O(1) 时间内解决(1x1 数独,或 4x4 数独,甚至 1000x1000 数独也可以),因为输入大小是固定的。 NP-completeness 是一个适用于 可变 输入大小的决策问题的概念,因此您可以分析算法的 运行 时间,因为输入大小渐近增长。
区别在于算法是否可以假设输入的大小,或者必须等到它收到输入才能看到多大了。
输入不必以二进制编码;它只需要使用一些有限大小的字母表。对于固定大小的数独,您可以为每个可能的谜题选择一个具有唯一符号的字母表。 (实际上,您可以用二进制对理论字母表进行编码,每个字母表符号都有一个固定大小的二进制字符串。这就是 ASCII 的工作原理。输入大小仍然是常数;它只是一个大于 1 的常数。)然后该算法使用硬编码 table 将输入字母表中的每个符号与其解决方案配对。解决难题的恒定时间算法只是 table 查找。
现在考虑拼图 而不是 具有固定大小的问题。可能的谜题数量 无限 ,因此算法必须
指定一些编码方案,该方案可以使用有限大小的字母表来描述无限数量的谜题。这有两个直接的后果。
您无法将所有可能输入的解决方案存储在有限的 space 中,因此您的算法需要在看到输入后进行实际工作来解决难题。
并非所有输入都具有相同的大小,因为来自有限字母表的固定符号串只能编码有限数量的谜题。一旦输入具有不同的大小,您就可以根据输入大小考虑算法必须完成的工作量。 (只是 阅读 输入现在是一个 O(n) 操作;解决问题所需的工作可能而且通常是更大。)
你正在分析 O(N)
中 N 趋于无穷大的问题。但是你输入的问题不会随 N 变化到无穷大,你有一个有限的上界。这个上限是常数。
这是因为存在有限的解集。您可以列出并枚举每个 9x9 数独。将所有解决方案索引到字典中,并将已知输入值作为索引。寻找解决方案只是在预先生成的字典中进行恒定时间查找。列表很大并不重要,只是它是有限的。
事实上,另一种解决方案是生成所有可能的数独网格,直到找到可以解决您的输入的数独网格。乍一看这似乎是一个线性解决方案,但由于上限有限,它实际上是一个恒定时间算法。
我确实经历了
我不明白这个。
数独泛化为 n 时是 NP 完全的 × 然而 n 网格 一个标准的 9 × 9 数独是 不是 NP- 完成。
正确;任何 9x9 数独都可以在 O(1) 时间内解决(1x1 数独,或 4x4 数独,甚至 1000x1000 数独也可以),因为输入大小是固定的。 NP-completeness 是一个适用于 可变 输入大小的决策问题的概念,因此您可以分析算法的 运行 时间,因为输入大小渐近增长。
区别在于算法是否可以假设输入的大小,或者必须等到它收到输入才能看到多大了。
输入不必以二进制编码;它只需要使用一些有限大小的字母表。对于固定大小的数独,您可以为每个可能的谜题选择一个具有唯一符号的字母表。 (实际上,您可以用二进制对理论字母表进行编码,每个字母表符号都有一个固定大小的二进制字符串。这就是 ASCII 的工作原理。输入大小仍然是常数;它只是一个大于 1 的常数。)然后该算法使用硬编码 table 将输入字母表中的每个符号与其解决方案配对。解决难题的恒定时间算法只是 table 查找。
现在考虑拼图 而不是 具有固定大小的问题。可能的谜题数量 无限 ,因此算法必须 指定一些编码方案,该方案可以使用有限大小的字母表来描述无限数量的谜题。这有两个直接的后果。
您无法将所有可能输入的解决方案存储在有限的 space 中,因此您的算法需要在看到输入后进行实际工作来解决难题。
并非所有输入都具有相同的大小,因为来自有限字母表的固定符号串只能编码有限数量的谜题。一旦输入具有不同的大小,您就可以根据输入大小考虑算法必须完成的工作量。 (只是 阅读 输入现在是一个 O(n) 操作;解决问题所需的工作可能而且通常是更大。)
你正在分析 O(N)
中 N 趋于无穷大的问题。但是你输入的问题不会随 N 变化到无穷大,你有一个有限的上界。这个上限是常数。
这是因为存在有限的解集。您可以列出并枚举每个 9x9 数独。将所有解决方案索引到字典中,并将已知输入值作为索引。寻找解决方案只是在预先生成的字典中进行恒定时间查找。列表很大并不重要,只是它是有限的。
事实上,另一种解决方案是生成所有可能的数独网格,直到找到可以解决您的输入的数独网格。乍一看这似乎是一个线性解决方案,但由于上限有限,它实际上是一个恒定时间算法。