[英]Subset of mutually exclusive items from sets
我设置了S_0, ..., S_N
。 如何找到最大子集T
,使得T
和S_i
的交点I_i
(对于每个0 <= i
<= N)最多包含一个元素。
我对此有一个解决方案,但是我猜测它的速度不必要地慢(本质上是几个嵌套的for循环尝试所有组合)。 所以我的问题是:
T
的有效算法? 我认为您不太可能找到解决此问题的有效通用算法,因为我认为它是NP完整的。
如果您有一个有效的算法来解决这个问题,那么您可以解决最大独立集问题 。
假设您有一个图,然后为每个边构造一个包含{i,j}的集合,其中i和j是由边连接的顶点。
然后,这些集合的最大子集T将是图形的最大独立集合。
更有用的是,当且仅当存在同时包含a和b的图集时,您还可以通过为图找到一个最大的独立图集来表达问题,其中a和b之间存在边。
然后,您可以使用一些标准求解器来解决最大的独立集问题,例如Pythons NetworkX中的那个。
您可以通过缓存集合S_a
和S_b
的交集是否为空来加速程序。 而不是建立集合T
,我认为它是S
中某些集合的并集。 您保留一个集合索引的列表T
,并检查集合S_n
是否与T
相交,请检查表中是否存在S_n
与其中一个相交的T
中的集合。
我在我的一个Python程序中执行了此操作,因为设置交集测试很慢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.