给定集合 $ \ {s_1,s_2,\ dots,s_n \} $ ,查找产生的集合之间的所有“减少”交叉点所需set $ \ {x \} $ 结果。 “缩小”的交叉点被定义为 $ s_i \ cap s_j \ cap \ dots \ cap s_k={x \} $ 的集合之间的交集,例如删除交叉点中的任何一个集合将所需集合 $ \ {x \} $ 的结果改变了结果。

例如,对于集合 $ \ {a,b,c,d,e,f \} $ ,其中:

$ a={c,d,f,g,x \} $

$ b={c,d,g,p,t,x \} $

$ c={e,i,x,y \} $

$ d={a,i,o,p,q,w,x \} $

$ e={f,t,w,x \} $ ,和

$ f={a,b,c,d,e \} $ ,然后:

  • $ a \ cap b \ cap e={x \} $ 是一个减少的十字路口,因为 $ a \帽B. = {c,d,g,x \} $ $ a \ cap e={f,x \} $ ,和 $ b \ cap e={t,x \} $ 。删除任何集合 $ a $ $ b $ ,或 $ e $ 从交叉口 $ a \帽B \ CAP E $ 产生的结果与所需的SET $ \ {x \} $
  • $ c \ cap d \ cap e={x \} $ 不是一个减少的十字路口,因为 $ c \ cap e={x \} $ 。删除集合 $ d $ 从交叉口 $ c \ cap d \ Cap E $ 仍然会产生所需的SET $ \ {x \} $ 结果。

我的问题是:给定集合,什么是最有效的算法,以找到产生所需集合的那些集合之间的所有减少的交叉点?

请注意,所需集是否只有其在其中的单个元素并不重要。在此示例中,我刚刚使用单个元素 $ x $ 为简单起见。

有帮助吗?

解决方案

您的问题相当于枚举所有包含最小集合封装,解决问题这里

假设您正在寻找交叉路口的所有集合集的集合 $ t $ 。所有相关集必须包含 $ t $ ,因此您可以考虑包含 $ t $ 的所有集合,从所有这些中删除 $ t $ 。这减少了案例 $ t=imptyset $

现在让 $ u $ 是所有集合的联合。集合集是空IFF,其补充的结合是 $ u $ 。换句话说,如果您补充所有集合,那么您对包含最小的集合封面感兴趣。

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top