如果您有一组范围,例如以下简单示例...
[
[12, 25], #1
[14, 27], #2
[15, 22], #3
[17, 21], #4
[20, 65], #5
[62, 70], #6
[64, 80] #7
]
...您如何计算最大相交子集(不确定如何表达它,但我的意思是“相交并具有最高基数的范围的子集”)并确定相交的程度(该子集中范围的基数)?
从逻辑上讲,我可以解决它,并且可能能够将其转换为一个幼稚的算法。从列表往下看,我们看到 1-5 相交,5-7 相交,并且 #5 与这两个集合相交。
我想要的结果只是子集,因为这给了我有关基数的信息,只要它们都相交,我就可以轻松计算集合的交集。在上面的示例中,它将是[[14, 27],[15, 22],[12, 25],[17, 21],[20, 65]]
.
在我的脑海中,我可能会尝试将每个范围转换为一个图节点,连接相交的节点,并找到最大的全连接图。
我也在反复思考从一开始就开始,继续建立一个相交范围的列表,每个范围都有一个运行的交点来检查——直到你碰到一个不相交的元素,然后开始一个新的列表。继续根据现有交叉点检查每个项目。但是我不确定这是否完整。
我可以尝试实现一些东西(lang 是 ruby FWIW),但我很想听听其他人如何解决这个问题,以及最有效和最优雅的方法可能是什么。
更新:
我相信这是最大集团问题的一个具体案例,它是 NP 难的,因此实际上很困难。对于近似值/实际使用的建议将不胜感激!
另请参阅:http ://en.wikipedia.org/wiki/Maximum_clique /在图中查找所有完整的子图
更新 2
在这里找到了这个问题的 NP-hardness 和 NP-completeness 的一个很好的证明:http ://www.cs.bris.ac.uk/~popa/ipl.pdf
看起来这是该行的结尾。对不起各位!我将使用足够好的贪婪近似值。谢谢。
正如答案中所说,我认为该论文没有描述这个问题......我们可能会根据范围在此处获得更多信息。