将以下问题简化为SAT


21

这是问题所在。给定,其中每个。是否存在子集,其大小最大为,使得所有?我正在尝试将此问题简化为SAT。我的解决方案的想法是为1到每一个变量。对于每个,如果,则创建一个子句。然后将所有这些子句放在一起。但这显然不是一个完整的解决方案,因为它不代表的约束。k,n,T1,,TmTi{1,,n}S{1,,n}kSTiixinTi(xi1xik)Ti={i1,,ik}S最多包含元素。我知道我必须创建更多的变量,但是我不确定如何。所以我有两个问题:k

  1. 我的解决方案思路是否正确?
  2. 如何创建新变量,以便可以将它们用于表示基数约束?k

5
请注意:您的问题称为HITTING SET,它是SET COVER问题的等效表达。
A.Schulz

Answers:


13

似乎您正在尝试计算大小为的超图横向。也就是说,是您的超图,而是您的横向。标准翻译是按需表达子句,然后将长度限制转换为基数约束。{ T 1T m } Sk{T1,,Tm}S

因此,请使用您现有的编码,即,然后添加编码子句。Σ 1 Ñ X ķ1jmiTjxi1inxik

1inxik是基数约束。有多种不同的基数约束转换为SAT。

最简单但相当大的基数约束转换只是。这样,每个取表示约束对于大小为k + 1 的的所有子集也就是说,我们确保无法设置超过k个变量。请注意,这不是以为单位的多项式大小X{1,,n},|X|=k+1iX¬xi¬iXxiX{1,,n}k

一些到论文的链接,它们涉及更节省空间的基数约束转换,这些k转换多项式大小

如果您实际上对解决此类问题感兴趣,也许最好将它们表述为伪布尔问题(请参阅有关伪布尔问题的Wiki文章)并使用伪布尔求解器(请参见伪布尔竞争)。这样,基数约束只是伪布尔约束,并且是语言的一部分-希望伪布尔解算器可以直接处理它们,因此效率更高。


1
请简短描述所有链接(至少是作者和标题),以便在链接断开时人们可以找到文档。如果可能的话,最好使用DOI。
拉斐尔

1
@Raphael好点!首先我应该道歉。我现在更新了所有链接;我不确定Springer是否提供DOI,但是如果链接断开,现在应该有足够的信息来找到它们。注意:为了避免访问问题,我不会链接到Springer的官方PDF。
MGwynne,2012年

但是看来您给出的减法不是在多项式时间内,对吗?
亚丁·董

@AdenDong您什么都没说多项式;)。我提到的简单基数约束转换不是多项式(而是固定k的)。在I列表给出的基数约束转换使用新变量的k多项式。我已经更新了答案,以使其更加清晰。kkk
MGwynne

MGwynne,我倾向于总是将官方的DOI链接起来,即使它是付费的,以确保面向未来,并另外提供免费版本。但是,现在,任何人都应该能够找到这些论文,因此完全可以。
拉斐尔

6

如果您不是绝对地使用普通SAT,则您的想法已经是减少MIN-ONES(相对于正CNF公式),这基本上是SAT,但是您最多可以将变量设置为true(严格来说,这是优化版本中我们尽量减少真实变量的数量)。k

同样,如果你在一个参数的复杂性方向头部,那么你已经基本上得到了WSAT(),其中Γ + 2 1是类的所有积极CNF公式(以前一样,符号可以帮助您调查)。在这种情况下,您必须开始研究哪种参数化对您的情况有用。Γ2,1+Γ2,1+

我假设您正在寻找一个显式的约简,但如果不是这样,您总是可以退回到Cook-Levin定理

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.