给出一个尺寸为W,H的框和该框内的点的坐标。找到没有任何这些点的最大区域

时间:2017-12-13 06:43:12

标签: algorithm geometry area

我们可以找到包含所有点的多边形或者它们都在边界上。然后简单地计算这个不规则多边形的面积,并从框的区域中减去它。 这是我得到的解决方案。如果我错了,请纠正我。

1 个答案:

答案 0 :(得分:1)

首次尝试:

通过增加X来对所有点进行排序。

初始化“最佳”区域,暂时为0。

对于所有增加X的点,让Pj,

  • 初始化一个“自由”垂直间隔,不包含除Pj之外的其他点;默认情况下,各点的纵坐标。

  • 考虑Pj右边的所有点,通过增加X,让Pk。

  • 如果Pk超出空闲间隔,则忽略它;其他

    • 更新可用间隔(将收缩);

    • 评估自由矩形的面积。如果比目前为止最好,请保留它。

    • 当你在最右边的横坐标上用虚拟点所达到的区域和对应于自由间隔的纵坐标低于最佳区域时,你可以停止对Pj的搜索。

  • 此时,您知道最大的空矩形,其左侧位于Pj的横坐标。

最后你会知道最大的一切。

该程序将在最坏情况下进行O(N²)操作(存在双循环)。鉴于使用虚构点的提前终止标准,我不确定这是否紧张。

可能可以实现更好的时间复杂度,例如通过限制Pk到自由板的遍历。这需要更多的复杂性。

在从Pj(最左边)处理8个点之后算法的中间阶段。虚构的点是橙色的。

enter image description here

<强>更新

为了正确处理点周围的空间,应该将域的四个角添加到点集中。