如何确定(子集的笛卡尔积的联合)是否等于(全套的笛卡尔乘积)

Edu*_*rdo 6 algorithm set cartesian-product

假设我有一些有限集: A, B, ..., K

我也有A1, A2, ... AnA的子集; B1, B2, ... Bn这是B等的子集

让我们说S是笛卡尔积A x B x ... x K

并且Sn是笛卡儿的产品An x Bn x ... x Kn

有没有一种算法可以有效地确定所有联合Sn是否相等S

编辑

我也在理论计算机科学论坛上问了这个问题.答案证明问题是完全可靠的.如果答案的作者想在这里发布,我仍然可以提出问题以奖励赏金.

tom*_*tom 3

该问题是coNP-Complete问题,因此没有有效的算法来解决它。

我将证明3SAT可以简化为该问题的补集(检查所有 S i的并集是否不等于 S)。

考虑变量 a、b、...、k 和布尔公式的 3SAT 问题

        f = c 1 ∧ c 2 ∧ ... ∧ c n

在哪里

        c i = x i,1 ∨ x i,2 ∨ x i,3

x i,j是一个文字(变量或变量的否定)。

设 A = B = C = ... = K = { true, false }。

将 A i设置为

  • { false } 如果 c i包含变量 a
  • { true } 如果 c i包含变量 a 的否定
  • { true, false } 如果 c i没有提到 a

对于 B i到 K i也同样,对于所有 1 ≤ i ≤ n。

任何元组 (a, b, ..., k) ∈ S i = A i ⨯ B i ⨯ ... ⨯ K i都不会满足 c i ,因为 c i中的所有文字都将被否定。

考虑元组 (a, b, ..., k) ∈ S 1 ⋃ S 2 ⋃ ... ⋃ S n。这些元组至少属于一个S i,因此它们不会满足ci 因此无法满足f 。

如果 S 1 ⋃ S 2 ⋃ ... ⋃ S n等于 S = A ⨯ B ⨯ ... ⨯ K,则所有元组都不能满足 f,因此 f 不可满足。类似地可以证明,如果并集不等于S,则存在满足f的元组。

所以3SAT可以简化为原问题的补集。但原始问题的补集是 NP 问题,因为测试给定元组是否不在并集中可以在多项式时间内完成。所以原问题的补集是NP-Complete,原问题本身是coNP-Complete。