繁体   English   中英

非相交线段同时最小化累积长度

[英]Non-intersecting line segments while minimizing the cumulative length

我想找到一个更好的算法来解决以下问题:

二维中有N 个起点(紫色)和N 个目标点(绿色)。 我想要一种算法,通过线段(棕色)将起点连接到目标点,而这些线段中没有任何线段相交(红色),同时最小化所有线段的累积长度。

我在 C++ 中的第一个努力是置换所有可能的状态,找到无交集的状态,以及那些总段长度最小的状态O(n!) 但我认为必须有更好的方法。

在此处输入图片说明

任何的想法? 或者好的搜索关键字?

这是2D 中的最小欧几里得匹配 该链接包含有关此问题的已知内容的参考书目。 鉴于您想最小化总长度,非相交约束是多余的,因为任何相交的线段的长度都可以通过不相交来减少。

您可以选择随机连接,然后每次通过更改其端点的连接来删除一个交叉。 此操作减少了总长度(通过三角不等式)。 由于相互交叉的线的方式数量是有限的,因此在有限数量的步骤中我们可以得到一个非交叉的解决方案。 在实践中,它应该很快收敛。

按照qq3的回答说交叉约束是多余的,还有一步。 将起点分配给终点,同时最小化总长度。 幸运的是,有一个多项式时间算法:

匈牙利算法是一种在多项式时间内解决分配问题的组合优化算法。

它将时间顺序从O(n!) 减少O(n 3 )

看起来您可以使用BSP 类型的算法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM