Answers:
似乎您正在尝试计算大小为的超图横向。也就是说,是您的超图,而是您的横向。标准翻译是按需表达子句,然后将长度限制转换为基数约束。{ T 1,… ,T m } S
因此,请使用您现有的编码,即,然后添加编码子句。Σ 1 ≤ 我≤ Ñ X 我 ≤ ķ
是基数约束。有多种不同的基数约束转换为SAT。
最简单但相当大的基数约束转换只是。这样,每个取表示约束对于大小为k + 1 的的所有子集也就是说,我们确保无法设置超过k个变量。请注意,这不是以为单位的多项式大小
一些到论文的链接,它们涉及更节省空间的基数约束转换,这些转换是多项式大小:
如果您实际上对解决此类问题感兴趣,也许最好将它们表述为伪布尔问题(请参阅有关伪布尔问题的Wiki文章)并使用伪布尔求解器(请参见伪布尔竞争)。这样,基数约束只是伪布尔约束,并且是语言的一部分-希望伪布尔解算器可以直接处理它们,因此效率更高。
如果您不是绝对地使用普通SAT,则您的想法已经是减少MIN-ONES(相对于正CNF公式),这基本上是SAT,但是您最多可以将变量设置为true(严格来说,这是优化版本中我们尽量减少真实变量的数量)。
同样,如果你在一个参数的复杂性方向头部,那么你已经基本上得到了WSAT(),其中Γ + 2 ,1是类的所有积极CNF公式(以前一样,符号可以帮助您调查)。在这种情况下,您必须开始研究哪种参数化对您的情况有用。
我假设您正在寻找一个显式的约简,但如果不是这样,您总是可以退回到Cook-Levin定理。