从一对数字列表中查找数字对的最快方法是什么,以便形成最大数量的对?
例如:我有6个数字:0,1,2,3,4,5
以下是有效对:
0 1
0 2
0 3
1 4
3 5
现在,一旦数字包含在一对中,该数字就不能包含在另一对中。
也就是说,如果我选择0 1对,我不能再选择0 2,因为我已经使用过0次。
我需要从有效对列表中选择对,以便获得最大对数。
根据示例:
如果我选择以下配对:
0 1
3 5
请注意,我只能选择这两对,这样就不会重复任何数字,剩下2和4。
但如果我选择以下配对:
0 2
1 4
3 5
我得到三对,没有数字是独自留下的。同样,从给定的列表中,我需要计算出我可以做出的最大对数。最有效的方法是什么?
答案 0 :(得分:4)
使用Bloossom算法可以在多项式时间复杂度下解决这个问题: http://en.wikipedia.org/wiki/Blossom_algorithm
形成一个图形,其中每个数字都是节点,并用边连接每一对。在此图上运行上述算法以找到解决方案。
答案 1 :(得分:2)
因此,您的有效对可以表示为图形,然后最大对数是该图中的最大匹配。
请注意,您可以拥有多个解决方案。对于有效对[(0,1),(1,2),(2,3),(3,4)] [[0,1],(2,3)]和[(1,2), (3,4)]是解决方案。