Algorithm 平面上两类点的非交叉赋值

Algorithm 平面上两类点的非交叉赋值,algorithm,geometry,Algorithm,Geometry,我必须写一个算法,在2D空间中给定n个蓝点和n个红点,将红点和蓝点与直线连接起来,而不相交。换句话说,我想要有n个不相交的对(每个由一个蓝色和一个红色点组成)。当我连接每对中的点时,连接线段不能相交。算法必须在O(n^2*logn)时间内运行 经过大量阅读,我决定采用以下想法:递归地将平面分成两半,这样在每一侧始终有相同数量的蓝色和红色点,直到只剩下一个红色和一个蓝色点-这些点可以用一条线连接。这种分而治之的方法将产生我所寻找的对数复杂性 问题是如何用一条线来划分一个平面,以便在每一侧有相等数量

我必须写一个算法,在2D空间中给定n个蓝点和n个红点,将红点和蓝点与直线连接起来,而不相交。换句话说,我想要有n个不相交的对(每个由一个蓝色和一个红色点组成)。当我连接每对中的点时,连接线段不能相交。算法必须在O(n^2*logn)时间内运行

经过大量阅读,我决定采用以下想法:递归地将平面分成两半,这样在每一侧始终有相同数量的蓝色和红色点,直到只剩下一个红色和一个蓝色点-这些点可以用一条线连接。这种分而治之的方法将产生我所寻找的对数复杂性

问题是如何用一条线来划分一个平面,以便在每一侧有相等数量的蓝色和红色点。再一次,在读了一些书之后,我发现了火腿三明治算法,它应该完全符合我在线性时间中所寻找的。然而,我很难理解它到底是如何工作的并将其翻译成代码。link对我最有帮助,但它们只大致描述了该算法的步骤,缺乏一些实现细节

主要问题是:我的方法正确吗?
如果是这样的话,你能给我解释一下火腿三明治的算法或者提供一些额外的材料/伪代码吗?

所以你想要有n个不相交的对,每对由一个蓝色和一个红色点组成,当你连接对的点时,连接线不应该相交?只是一个旁注:这个问题可以重写为LSAP(线性和分配问题),可以在O(n^3)时间内解决。对于某些配置(例如,如果蓝色和红色点的并集形成凸多边形),有更快的算法(如.O(n^2)时间中提到的示例)。我知道,我读过,但我正在寻找O(n^2*logn)解决方案。应用具有O(n)时间复杂度的火腿三明治算法不会导致O(n^2)时间算法吗?只有O(n)“火腿三明治切割”是必要的,对吗?隔离一对(蓝色、红色)ld(n)切割就足够了。但要最终分离所有n对,你需要(n-1)切割。