C++ 最小对和
给定2D平面中的2N个点,必须将它们分组为N对,以使所有对点之间的距离总和为最小可能值。所需输出仅为总和。 换句话说,如果a1、a2、…an分别是第一对、第二对…和第n对点之间的距离,则(a1+a2+…an)应为最小值。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 这不是我的家庭作
让我们考虑这个测试用例,如果<强> 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节 我之前提到的那本书值得一读(尽管它可能有点枯燥),以获得更深入的理解 呸。希望有帮助
您的最终总和将主要由最大的加数控制。利用这一点的最简单算法可能是这样的(我无法证明):
因为您本质上是在为2个集群寻找一个聚类算法,或者搜索一个可能很有趣的。实验粒子物理界的人们正在研究类似问题的启发式算法。在谷歌搜索了一段时间后,我发现了一些关于最小权重完美匹配算法的其他参考资料,这些算法可能更容易理解(至少在一定程度上更容易理解) 编辑 这些算法之一。它有837行代码(+一些额外的单元测试),我没有亲自尝试。但也许你可以把它用在你的案子上 对问题的近似算法。当然,这张纸的风格也是数学的,但我觉得比库克和罗厄的纸更容易理解。它在前言中说,它的目的正是为了比Edmond的原始算法更容易实现,因为你不需要线性算法