两条平行线之间的最大点数

时间:2012-04-26 19:16:49

标签: algorithm parallel-processing lines points

我得到N + 2个整数坐标点。其中2个是基点。需要通过给定的基点绘制两条平行线。两条平行线之间的最大点数是多少?对不起我的英文,并提前致谢!

在下图中,RED点是基点,BLACK是正常点。黄色区域是需要最大黑点数的地方。如果其中一个黑点在其中一条线上,则认为这一点在线之间。

http://i.stack.imgur.com/Awhg6.png

我找到了时间复杂度为O(N * N)的解决方案,但这太慢了。

1 个答案:

答案 0 :(得分:2)

想象一下,你的两条线穿过两个基点。线条之间的条带宽度为0,内部没有任何点(或者有一些点,取决于您对“内部”的定义。)

现在想象两条线慢慢逆时针旋转,同时保持平行。完成半圈后,它们处于与以前相同的位置。当线条旋转时,它们会穿过您的点,从而进入和离开线条之间。

假设线条每单位时间产生一定数量的旋转,则计算每个点进入线条之间的条带的时间,以及离开条带的时间。 (这些时间基本上是角度)。将两种事件一起排序。现在查看事件,每个条目事件计数+1,每个退出事件计数-1。对于在同一时间发生的事件,首先执行-1或首先执行+1,这取决于您对“内部”的定义。跟踪最大数量。