繁体   English   中英

集合中互斥项的子集

[英]Subset of mutually exclusive items from sets

我设置了S_0, ..., S_N 如何找到最大子集T ,使得TS_i的交点I_i (对于每个0 <= i <= N)最多包含一个元素。

我对此有一个解决方案,但是我猜测它的速度不必要地慢(本质上是几个嵌套的for循环尝试所有组合)。 所以我的问题是:

  • 是否有针对此问题的有效算法?
  • 如果不是,是否有找到子集T的有效算法?

我认为您不太可能找到解决此问题的有效通用算法,因为我认为它是NP完整的。

如果您有一个有效的算法来解决这个问题,那么您可以解决最大独立集问题

证明草图

假设您有一个图,然后为每个边构造一个包含{i,j}的集合,其中i和j是由边连接的顶点。

然后,这些集合的最大子集T将是图形的最大独立集合。

转换为最大独立集

更有用的是,当且仅当存在同时包含a和b的图集时,您还可以通过为图找到一个最大的独立图集来表达问题,其中a和b之间存在边。

然后,您可以使用一些标准求解器来解决最大的独立集问题,例如Pythons NetworkX中的那个。

您可以通过缓存集合S_aS_b的交集是否为空来加速程序。 而不是建立集合T ,我认为它是S中某些集合的并集。 您保留一个集合索引的列表T ,并检查集合S_n是否与T相交,请检查表中是否存在S_n与其中一个相交的T中的集合。

我在我的一个Python程序中执行了此操作,因为设置交集测试很慢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM