将矩形划分为包含正好1个点的较小的矩形,最大化荒地面积

时间:2013-12-03 22:04:20

标签: algorithm geometry computational-geometry mathematical-optimization

给定一个包含P点的矩形R,与轴正交,点是自然数。

包裹是一个矩形:

  • 完全在R
  • 两侧与轴正交
  • 里面只包含一个点
  • 其边必须与R的边相邻或包含P
  • 的点

找到一个算法,在R中找到所有可能的地块,这样它们的总面积就会最小(最大化荒地面积)。

示例:分割方式中的一种,5分(*),2个包裹

    R
|-----------------------------------------------|
|                   |                   |       |
|                   |                   |   *   |
|                   *                   |       |
|                   |                   *       |
|                   |               *   |       |
|                   |                   |       |
|                   |                   |       |
|                   |-----------*-------|       |
|    wastelands                         |       |
|                                       |       |
|                                       |       |
|-----------------------------------------------|

首先,让我们跳过优化(最大/最小)。有没有什么好方法来划分矩形?

修改

看起来它可能是NP难的。我从这个问题的发起人那里得到了一些反馈,找到所有可能的包裹是毫无意义的。 我认为唯一的方法是使用一些启发式方法(例如找到包含大部分点的最大包裹或包裹)并检查结果。

2 个答案:

答案 0 :(得分:0)

对于初学者来说,我可以想到一种回溯和指数难的方法。您可以按某种顺序选择积分,每次都执行以下任一操作:

1-决定通过垂直线 2-决定通过水平线 3-决定忽略

直到你最终得到3 ^ n个不同的案例。

对于您自己的应用程序,您可以考虑在每次迭代时应用一些边界条件,例如,验证您是否最终得到了一个没有内部点的包裹,然后回溯。

答案 1 :(得分:0)

蛮力是为每个点找到包含该点(内部)的所有可能的矩形,并在所有矩形的集合上求解exact cover set problem

要查找包含给定点的所有矩形“相对”简单: - )

从一个最大一边的矩形开始。例如。对于点(a,b),具有最大y侧的矩形是在x坐标最接近a(从两侧)并且水平边界在R上的点上具有垂直边界的矩形。如果存在其他点则不是这种情况(s) )x坐标等于a,但只能将水平边界移动到y方向的最近点。

下一个矩形必须具有较小的y侧,这意味着用于较短矩形中的垂直边界的边界点(B)用于水平边界。垂直边界的点是从B的同一侧选择,以支持矩形约束(创建矩形,矩形区域中没有其他点。)