很抱歉回答一个旧帖子。
我一直在思考,我认为固定字母的问题也是NP完全的。
我要减少正三分之一的SAT到这个单词问题
昨天我遇到了解决问题的想法。在再次查看该问题之前,我很难使每个变量都不同,并且我意识到您允许使用带有已植入符号的正方形。这大大简化了减少。我的另一个想法是为每个不同的变量使用不同长度的单词。
减少
现在,我将描述我们将要使用的小工具:
可变小工具
我们用不同的数字索引标记每个变量,并且每个变量都有不同的数字。我们选择最大的索引,并用二进制表示数字,我们将其称为二进制链。ñ
然后,我们为每个变量创建两个不同的垂直词。所有单词的长度为(仅当我们允许单词列表中包含重复单词时),其中| n | 是二元链n的长度。3 + | n || n |ñ
例如,让最大索引为数字。当我们将此数字转换为二进制时,我们获得二进制的链100,该链的长度为3。因此,在此示例中,每个可变字的长度为6。41006
现在,我们为每个变量创建两个不同的词。一个单词的开头将带有符号,然后是下面的符号2,然后是代表变量索引的二进制链,我们用零填充该链,以使其长度与链n相同,最后与符号3相同。在最后。当然,可以更改符号。32n3
另一个词几乎相同,但是它将具有符号而不是符号3。43
例如,让最大索引为数字。对于索引为1的变量,我们将有以下两个单词:41
和 420014320013420014
1|n|
我们必须多次复制这些单词,对于SAT实例中每次出现的变量,我们将需要每个单词一个副本。这将在单词列表中创建重复项。我们可以通过在二进制链中添加另一个唯一标识变量的二进制链来消除重复项。这个新链将唯一地标识变量的每个出现。
为此,我们只需为变量的每个出现都分配另一个二进制链,然后在该变量的二进制表示形式的末尾将该链点空白。
niini|ni||ni|
这将消除变量字内的重复项。
x2
32010013 4201001432010103 4201010432010113 42010114
条款小工具
6
535354535453545353
435
mm|m||m|。我们将每个二进制链附加到属于该子句的子句单词。
现在,让我们看一下董事会中子句小工具的图片:
(x2∨x3∨x4)(x1∨x2∨x3)∧(x2∨x3∨x4)
4
如果我们不允许单词列表中出现重复项,则必须修改图像。
5b5b5b10
b201010bb201110bb21001b
b
看一个例子:
可变一致性小工具
这是一个小工具,可确保播放器只能为变量的所有文字列分配相同的值。
每个变量我们都会有一个新的小工具
我们将为每个小工具创建两个新词。
2∗kkx263 k64 k
x2
63636464
如果我们想避免重复单词,请注意每个一致性小工具都属于一个不同的变量。因此,我们可以将标识每个变量的二进制链附加到为此小工具创建的两个单词中。
现在,让我们看一下该小工具的示例图片:
x2(x1∨x2∨x3)∧(x2∨x3∨x4)
3434。我们可以将该gagdet的其余单词放在另一行
如果我们不允许单词列表中的重复单词,则示例图片中的单词将为:
对于行:
6b6b0106b6b010
对于列:
b201001bb201010b
b
看一个例子:
条款转储小工具
这是一个用于放置未使用的从句单词的小工具。为此,我们只需要为每个子句单词在董事会的空白部分放置两行。这些行未连接到任何其他行或列。
这样我们就完成了减少,因为我们声称我们只需要6个符号即可减少。
例
如果先前的解释令人困惑,那么下面是示例SAT中正1的实例的示例图片,该实例已简化为以下单词问题:
如果我们不允许重复的话:
已减少的实例为:
(x1∨x2∨x3)∧(x2∨x3∨x4)