【发布时间】:2018-05-01 04:30:05
【问题描述】:
给你一个 n 点,在一个数组中未排序。你应该找到两个覆盖所有点的矩形,它们不应该重叠。矩形的边缘应平行于 x 或 y 纵坐标。
该程序应返回所有这些点所覆盖的最小区域。第一个矩形的面积 + 第二个矩形的面积。
我试图解决这个问题。我按 X 纵坐标对点进行排序,第一个是第一个矩形的最左侧。当我们遍历这些点时,我们会找到最高点和最低点。我在想,当 x 两点之间的差异最大时,这意味着第一个点是第一个矩形的最右边,第二个点是第二个矩形的最左边的一个。
它应该在第一个示例中给出点时起作用,但是,如果该示例是第二个示例,则它不起作用。因为它会返回这样的东西,这是错误的:
这应该是正确的:
然后我想进行两次排序,只是,第二次按 Y 坐标进行,然后比较两个总区域。点按 x 排序和点按 y 排序时的区域,较小的区域是正确答案。
【问题讨论】:
-
那么您对我们有什么期望?这个问题中的“溢出”(您尝试过并停留在某个地方)在哪里?
-
我更新了问题
-
这是来自编码竞赛的问题吗?你能提供一个比赛的链接吗?
-
即使在您更新之后,也不清楚是什么问题。 你尝试过你想做的事情吗?结果是你想要的吗?
-
这是轴平行两个矩形点集覆盖问题的变体,其中一个 O(nlogn) 解决方案发表在“Covering a set of point by two axis-parallel boxes”[贝斯帕米亚特尼克,西格尔 2000]。在这个问题中,最小化的函数是(以及其他替代方案)较大矩形的面积,而在您的问题中,应该最小化的函数是矩形面积的总和。
标签: algorithm geometry computational-geometry