假设我有一些有限集:A, B, ..., K
我也有A1, A2, ... An
,它们是A的子集; B1, B2, ... Bn
是B等的子集。
我们说S
是笛卡儿积A x B x ... x K
和Sn
是An x Bn x ... x Kn
是否有算法可以有效地确定所有Sn
的并集是否等同于S
?
修改
我也在Theoretical Computer Science论坛中提出了这个问题。答案证明问题是完全可靠的。如果答案的作者想在这里发布,我会保持开放的问题以奖励赏金。
答案 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 设置为
类似地对于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)
。