Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 求最大对数的有效算法_C++_Algorithm - Fatal编程技术网

C++ 求最大对数的有效算法

C++ 求最大对数的有效算法,c++,algorithm,C++,Algorithm,从数字对列表中找到数字对的最快方法是什么,以形成最大数量的数字对 例如:我有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 0 2 1 4 3 5 请注意,我只能选择这两对,这样就不会重复任何数字,只剩下2和4 但

从数字对列表中找到数字对的最快方法是什么,以形成最大数量的数字对

例如:我有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
0 2
1 4
3 5
请注意,我只能选择这两对,这样就不会重复任何数字,只剩下2和4

但如果我选择以下几对:

0 1
3 5
0 2
1 4
3 5

我有三双,没有一双是单独留下的。类似地,从给定的列表中,我需要计算我可以生成的最大对数。最有效的方法是什么

因此您的有效对可以表示为一个图,然后最大对数就是该图中的最大匹配数


请注意,您可以有多个解决方案。对于有效对[(0,1),(1,2),(2,3),(3,4)],[(0,1),(2,3)]和[(1,2),(3,4)]都是解。

可以使用Bloossom算法以多项式时间复杂度解决此问题:


形成一个图形,其中每个数字都是节点,并用边连接每一对。在此图上运行上述算法以找到解决方案。

此问题闻起来像NP难问题。。有人能证实吗?这是顶点覆盖问题的一种变体吗?@vincentleest肯定。@vincentleest:看起来像是P中的。为什么
(0,4)
(0,5)
(2,4)
(1,5)
(2,5)
不是有效的对?或者你只是得到了一个对的列表,你需要选择一个最大子集吗?@BillLynch:在边的列表中(如果你将这些对视为边),你需要生成边数最大的子集,你是说用DFS计算最长路径?@bayblade567:一个简单的贪婪算法就足够了。。。看……最大匹配和最大匹配是有区别的。@riko,你说得对。丽子:嗯,的确,读得太快了,而且分享了两个错误的。。。很抱歉