找出能容纳另一个矩形的面积最小的矩形



假设我有一组矩形(大小不同或相同)。

  1. 任务是从集合中找到(并删除)大于或等于给定矩形的矩形。
  2. 它还应该是集合中比可以包含给定矩形的最小矩形。

这很容易通过线性搜索/更新在O(n)时间内解决,但是有可能获得更好的结果吗?我认为O(log n)是最优的。插入和删除也必须比0 (n)快,这样在我的情况下才有用。

是否可以通过不寻找最佳矩形来创建任何捷径,而是将第二个限制放宽为:"它还应该是包含给定矩形的最小矩形之一"-

我正在考虑使用z顺序曲线(宽度/高度),并将其用作一维索引,并将其与树相结合。这样行吗?还是会有太多的浪费?

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

有人做过类似的事情,可以分享他们的经验吗?

这是一个还没有完全阐述的想法:

也许你可以使用一个带有两个元组值(高度和宽度)的四叉树,每个元组值代表一个矩形。

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

  • (<w, <h) -包含具有较小宽度和较小高度的矩形
  • (>=w, <h) -包含较大宽度和较小高度的矩形
  • (<w, >=h) -包含具有较小宽度和较大高度的矩形
  • (>=w, >=h) -包含具有较大宽度和高度的矩形

当你下降在(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)。不确定是否要删除和平衡。但我几乎可以肯定,这也是有解决办法的。

相关内容

  • 没有找到相关文章

最新更新