给定一般位置的平面中的N个点的列表(没有三个是共线的),找到一个与N个原始点的任何一对不共线的新点p。
我们显然无法搜索平面中的每个点,我开始找到可以用给定点形成的所有线的重合点,或者用它们制作圆圈的东西......我没有任何线索如何检查所有要点。
http://introcs.cs.princeton.edu/java/42sort/
中的问题我在一本着名的算法书中发现了这个问题,这意味着它是可以回答的,但我想不出最佳解决方案,这就是为什么我在这里发布它以便如果有人知道它可以回答它
答案 0 :(得分:0)
我能想到的最好的是N ^ 2算法。这是:
我将在步骤5中留下如何选择P沿L的下一个位置的详细信息,
你可以做一些明显的琐碎拒绝测试,只有测试线M与L“足够平行”才能进行更昂贵的检查。
最后,我应该提一下,可能有可能将P推得远远超出数值问题。在这种情况下,我建议的最好的方法是尝试在凸包外面的另一条线至少 3e 。
答案 1 :(得分:0)
您可以使用简单的O(nlogn)算法实际解决它,然后我们将改进为O(n)。名称最底部的一个点(如果是平局,则选择具有较小x坐标的那个)。您现在可以使用CCW按顺时针顺序对其余点进行排序。现在当您从排序顺序处理每个点时,您可以看到在具有与点A和底轴不同的角度的任意两个连续点之间(让这些是U,V),没有点具有角度c,其中U <= c&lt; = V.因此我们可以添加本节中的任何一点,并保证它不会与该集合中的任何其他点共线。 所以,你所需要的只是找到一对相邻的点,你就完成了。因此,在O(n)时间内找到A(这些应该是不同的)的最小和第二个最小角度,并选择它们之间的任何点。