有效地选择互斥对

use*_*235 9 algorithm

这是一个可以用某种类型的暴力算法完成的问题,但我想知道是否有一些有效的方法来做到这一点.

我们假设我们有以下整数对

 (1, 3), (2, 5), (4, 7), (2, 7), (10, 9)
Run Code Online (Sandbox Code Playgroud)

我们想弄清楚互斥对的最大数量是多少.

通过互斥对,我的意思是它们没有任何公共整数.

例如,我们不能同时选择(2,5),(2,7),因为两个对都包含2.

在上面的例子中,4将是一个解决方案,因为我们可以选择以下互斥对:

      (1, 3), (2, 5), (4, 7), (10, 9)  
Run Code Online (Sandbox Code Playgroud)

因此总共有4对.

我想知道是否有有效的方法这样做.

Pau*_*kin 13

您的问题等同于在图表上找到最大匹配.图形的节点是整数,您的对(a,b)是图形的边缘.匹配是一组成对的非相邻边,这相当于说同一个整数不会出现在两个边上.

该问题的多项式时间解决方案是Blossom算法,也称为Edmond算法.在这里将答案中的细节包含在内是相当复杂的.