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

时间:2013-08-16 20:14:47

标签: algorithm set cartesian-product

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

我也有A1, A2, ... An,它们是A的子集; B1, B2, ... Bn是B等的子集。

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

SnAn x Bn x ... x Kn

的笛卡尔积

是否有算法可以有效地确定所有Sn的并集是否等同于S

修改

我也在Theoretical Computer Science论坛中提出了这个问题。答案证明问题是完全可靠的。如果答案的作者想在这里发布,我会保持开放的问题以奖励赏金。

2 个答案:

答案 0 :(得分: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 = {真,假}。

i 设置为

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

类似地对于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 ,因此它们不满足c i ,因此无法满足f。

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

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

答案 1 :(得分:1)

我不知道是否有可能有效地做到这一点。但是,通过逐步检查更多的集合,如果答案是否定的话,实际上可以提前纾困:

  • A1, ..., An的联合应为A每套
  • 每对A1 x B1, ..., An x Bn的{​​{1}}联盟A x B {/ 1}}
  • 重复三次组等

更多地考虑它,我似乎不太可能在不检查A x B的每个元素的情况下完全检查这一点。请考虑以下实例:

S

此处所有A = {a1, a2, a3} B = {b1, b2, b3} C = {c1, c2, c3} A1 = A B1 = B C1 = {c2, c3} A2 = A B2 = {b2, b3} C2 = C A3 = {a2, a3} B3 = B C3 = C 的联合为Sn。这似乎很难从给定的子集中检测到,而没有明确地检查S - (a1, b1, c1)