找到具有可容纳另一个矩形的最小区域的矩形

时间:2015-05-26 12:34:58

标签: algorithm search data-structures computational-geometry best-fit

假设我有一组矩形(具有不同或相同的尺寸)。

  1. 任务是从大于或等于给定矩形的集合中查找(并删除)矩形。
  2. 它也应该是集合中可以包含给定矩形的最小矩形。
  3. 这可以通过线性搜索/更新在O(n)时间内轻松解决,但是可以获得更好的结果吗? O(log n)是最佳的我假设。 插入和移除也必须比O(n)更快,因为在我的情况下这是有用的。

    可以通过找不到最佳矩形来制作任何快捷方式,而是放宽第二个限制: "它也应该是可以包含给定矩形的最小矩形之一" -

    我正在考虑使用Z-order curve(宽度/高度)并将其用作一维索引并将其与树结合。 那会有用吗?还是会有太多浪费?

    另一种方法是使用一个轴使用树,然后线性地测试另一个。

    任何做类似事情的人都可以分享他们的经历吗?

1 个答案:

答案 0 :(得分:2)

这是一个尚未完全阐述的想法:

也许你可以使用一个四重分支的树,其中每个代表一个矩形的2元组值(高度和宽度)。

一个节点(w,h)有4个子节点:

  • (<w, <h) - 包含宽度较小且高度较小的rects
  • (>=w, <h) - 包含宽度更大,高度更小的rects
  • (<w, >=h) - 包含宽度更小,高度更高的rects
  • (>=w, >=h) - 包含宽度更大,高度更高的rects

当您在(w, h) rect节点下降以查找(w2, h2) rect的容器时,现在有4种不同的情况:

  • w2<w and h2<h - 三个选项:(>=w, <h)(<w, >=h)(>=w, >=h)
  • w2>=w and h2<h - 两个选项:(>=w, <h)(>=w, >=h)
  • w2<w and h2>=h - 两个选项:(<w, >=h)(>=w, >=h)
  • w2>=w and h2>=h - 一个选项:(>=w, >=h)

你必须下降到所有可能的分支,这仍然比O(n)更好。

插入是O(log n)。 还不确定删除和平衡。但我几乎肯定也有解决方案。