Answers:
对于任何常数,您都无法在时间内求解,除非强指数时间假设为假。
也就是说,如果我们有这样的算法,我们可以在时间内求解变量CNF可满足性,。其原因是,我们可以在两个等份划分变量和的的每个变量。对于每个部分,我们分别按照以下方式构造子句子集的族和。对于每个分配,我们添加一个子集,其中包含该分配不满足的子句。此构造在时间中运行。
为了完成构造,我们注意到原始的CNF实例具有解决方案,前提是有一个子集与某个子集不相交。
除了为每个子句添加一些额外的元素到您的基础集之外,将这个不相交的问题嵌入到集合包含的问题中也并不难。您基本上可以对中的子集进行补充。为了确保两个集合不被计为包含,您可以在附加元素上添加来自反链的代码。在的子集上使用了另一个反链代码(在地面集的其他额外元素上),以确保没有任何来自的子集对形成包含。最后,由构成的所有集合都包括的反链代码的所有元素。F 1 F 2 F 2 F 1 F 2
这是关于地面集合上个子集的集合包含问题。该论点基本上可以追溯到Ryan Williams的一些早期论文(不记得是哪篇)。 d = p Ö 升ý (Ñ )
如果您对集合族感兴趣,那么与Yuval答案中概述的概念非常相似的另一种解决方案是计算zeta变换
其中是输入族的指标函数。即,,如果和否则。显然,存在集合使得当且仅当对于某些。˚F = { s ^ 1,S ^ 2,... ,小号Ñ } ˚F (小号)= 1个小号∈ ˚F ˚F (小号)= 0 š 我 ≠ 小号Ĵ 小号我 ⊆ 小号Ĵ ˚F ζ (小号)> 1 小号∈ ˚F
可以使用Yates的算法在时间计算zeta变换,例如,参见Knuth的TAOCP,vol。2,第4.6.4节。该算法本身是一个相当简单的动态编程,很容易对其进行修改以给出一个包含集的示例(如果存在)。
这个问题可以通过使用用于快速矩阵乘法的算法来解决,而且我也怀疑它在计算上等同于矩阵乘法(尽管我不知道有任何方法可以证明这一点,而且我不认为有证明这一点的技术存在) )。当n = d时,此解决方案的运行时间为O(n ^ {2.373}),而d和n之间其他关系的运行时间为其他时间。
这是使用矩阵乘法解决问题的方法:在n×d矩阵A的行中写集合的特征向量,在ad×n矩阵B的列中写集合的补向量的特征向量。然后将A乘以B。相交的集合对恰好等于零的乘积A * B的位置。
有关此问题的最佳运行时间,请参见有关该主题的Huang和Pan论文。如果我没记错的话,当d变得足够大时,运行时间将成为显然最佳的O(nd)。对于n = d,您的运行时间为O(n ^ {2.373})。对于n和d的其他关系,您将获得其他值。如果存在用于矩形矩阵乘法的最佳算法,您将获得问题的运行时间为O(n ^ 2 + nd)的算法。我怀疑没有比这更好的方法来解决您的问题了,但是我不确定。
由于这些算法的常数太大,因此该解决方案可能无法实际使用。对于合理的n和d值,Strassen的算法可能会比单纯的解决方案有所改进,但我什至不确定。但是,看起来与矩阵乘法如此相关的问题似乎很少有比朴素算法更好的组合算法(比多对数因子要好),因此,如果我不得不猜测,我想对于这个问题,没有好的算法使用当今的技术,它比幼稚的要好得多。
如果那么我们知道该集合不是Sperner引理的反链,因此问题的决策版本变得无关紧要。但是考虑接近该值的情况可能会很有趣。 Ñ
Friedgut在Erdős-Ko-Rado定理上的工作表明,给定子集族的特征向量,可以及时发现是否是相交的族(两个元素)相交)。更笼统地说,他的方法允许我们计算 其中是一些(特定的)已知函数,它不是仅当不相交时为零。仅取决于的直方图,其中是的指标。[ 米] ø (米2 米)˚F ˚F Σ = Σ X ,ÿ ∈ ˚F小号(X ,ÿ ),小号(X ,ÿ )≥ 0 X ,ÿ 小号(X ,Ý ){ (X 我,ÿ 我):我∈ [ d ] } X 我
(顺便说一句,如果我们给定两个族,并且对感兴趣,我们的方法也适用。在这两种情况下,我们都需要针对任意,计算的偏傅里叶-沃尔什变换,然后,其中,仅取决于汉明权重的)。Σ = Σ X ∈ ˚F ,ÿ ∈ 克小号(X ,ÿ )p ˚F ,克p ∈ (0 ,1 / 2 )Σ = Σ X Ť (X )˚F(X )克(X )T (x )x
这一切与眼前的问题有什么关系?考虑族 每个与每个不相交。由于是明确给出的,因此我们可以计算这些对对的贡献。还有更多不相交的对吗?如果与不相交,则,因此。所以是反链iff
该算法在时间,而忽略了因子多项式。当接近,这明显优于。通常,只要,我们就会得到改进。
假设我们知道存在满足一对,我们如何找到它?假设我们将所有集合随机分为两组。以大约概率,集合和将发现自己在同一组中。如果幸运的话,我们可以在和上运行我们的算法,找到它们属于哪个,从而将需要考虑的集合数量减半。如果没有,我们可以再试一次。这表明,通过对决策版本的 oracle调用的预期数量,我们实际上可以找到满足一对。
我们还可以对算法进行非随机化。不失一般性,假设。在每个步骤中,我们根据位中的每一个进行分区。这些分区之一将始终将和放在同一部分中,除非它们具有相反的极性。我们可以仅使用操作对此进行显式测试。这给出了使用 oracle调用决策版本的确定性算法。 k x y O (n d )O (log 2 n )