C++ 最小对和

C++ 最小对和,c++,c,algorithm,math,C++,C,Algorithm,Math,给定2D平面中的2N个点,必须将它们分组为N对,以使所有对点之间的距离总和为最小可能值。所需输出仅为总和。 换句话说,如果a1、a2、…an分别是第一对、第二对…和第n对点之间的距离,则(a1+a2+…an)应为最小值。 让我们考虑这个测试用例,如果 2×5 < /强>点是: {20,20}, {40, 20}, {10, 10}, {2, 2}, {240, 6}, {12, 12}, {100, 120}, {6, 48}, {12, 18}, {0,0} 所需输出为237 这不是我的家庭作

给定2D平面中的2N个点,必须将它们分组为N对,以使所有对点之间的距离总和为最小可能值。所需输出仅为总和。

换句话说,如果a1、a2、…an分别是第一对、第二对…和第n对点之间的距离,则(a1+a2+…an)应为最小值。

让我们考虑这个测试用例,如果<强> 2×5 < /强>点是: {20,20}, {40, 20}, {10, 10}, {2, 2}, {240, 6}, {12, 12}, {100, 120}, {6, 48}, {12, 18}, {0,0}

所需输出为237


这不是我的家庭作业,我对不同的方法很好奇,而不是暴力。

你似乎在寻找

有一些算法可以利用这些是平面上的点这一事实。本文:有一个算法,并提到了一些以前的工作


根据要求,这里简要介绍了一种用于图中最小加权完美匹配的“简单”算法。这是Papadimitriou&Steiglitz的《组合优化、算法和复杂性》一书中关于加权匹配章节的一个简短总结

假设给定了一个加权无向图G(具有偶数个节点)。通过添加缺失的边并赋予它们很大的权重,该图可以被视为一个完整的加权图

假设顶点标记为1到n,顶点i和j之间的边的权重为c(i,j)

我们有n(n-1)/2个变量x(i,j),表示G.x(i,j)=1的匹配,如果i和j之间的边在匹配中,则x(i,j)=0

现在,匹配问题可以写成线性规划问题:

最小化和c(i,j)*x(i,j)

条件是

和x(1,j)=1,其中j的范围为1到n

和x(2,j)=1,其中j的范围为1到n。 . .

和x(n,j)=1,其中j的范围为1到n

(和x(1,j)=1基本上意味着我们正选择一条边入射到标记为1的顶点。)

最后的条件是

x(i,j)>=0

(我们可以说x(i,j)=0或1,但这不会使其成为线性规划问题,因为约束条件是线性方程或不等式)

有一种称为单纯形法的方法可以解决这个线性规划问题,从而在多项式时间内给出变量数的最优解

现在,如果G是二部的,我们可以得到一个最优解,使得x(i,j)=0或1。因此,通过求解二部图的线性规划问题,我们得到了每个x(i,j)的一组赋值,每个赋值为0或1。我们现在可以通过拾取x(i,j)=1的边(i,j)来获得匹配。约束保证它将是具有最小权重的匹配

不幸的是,对于一般图(即x(i,j)为0或1)来说,情况并非如此。Edmonds发现这是因为图中存在奇数圈

因此,除了上述限制外,Edmonds还增加了一个额外的限制,即在大小为2k+1(即奇数大小)的顶点的任何子集中,匹配边的数量不超过k

枚举每个奇数顶点子集以获得集合S(1),S(2),…,S(2^n-n)的列表。设S(r)的大小为2*S(r)+1

然后,对于每个集合S(r),上述约束为

和x(i,j)+y(r)=s(r),对于s(r)中的i,j

Edmonds随后证明,这足以保证每个x(i,j)为0或1,从而为我们提供了最小重量的完美匹配

不幸的是,现在变量的数量已经成了指数大小。因此,单纯形算法,如果按原样运行,将导致指数时间算法

为了克服这个问题,Edmonds考虑了这个线性规划问题的对偶问题(我在这里不详细介绍),并证明了在对偶问题上运行原始对偶算法只需O(n^4)步就可以得到一个解,从而为我们提供了一个多项式时间算法!他通过证明y(r)的O(n)在算法的任何一步(他称之为flowers)都不为零来证明这一点

这里有一个链接,它应该更详细地解释一下:,第2节

我之前提到的那本书值得一读(尽管它可能有点枯燥),以获得更深入的理解

呸。希望有帮助



您的最终总和将主要由最大的加数控制。利用这一点的最简单算法可能是这样的(我无法证明):

  • 按最近邻距离对点进行降序排序
  • 第一个条目及其最近邻的表单对
  • 从列表中删除对
  • 如果列表不为空,转到1
  • 这应该经常奏效


    因为您本质上是在为2个集群寻找一个聚类算法,或者搜索一个可能很有趣的。实验粒子物理界的人们正在研究类似问题的启发式算法。

    在谷歌搜索了一段时间后,我发现了一些关于最小权重完美匹配算法的其他参考资料,这些算法可能更容易理解(至少在一定程度上更容易理解)

    编辑

    这些算法之一。它有837行代码(+一些额外的单元测试),我没有亲自尝试。但也许你可以把它用在你的案子上

    对问题的近似算法。当然,这张纸的风格也是数学的,但我觉得比库克和罗厄的纸更容易理解。它在前言中说,它的目的正是为了比Edmond的原始算法更容易实现,因为你不需要线性算法