algorithm – 找到可以容纳另一个矩形的最小区域的矩形

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

>任务是从大于或等于给定矩形的集合中查找(并删除)矩形.
>它也应该是集合中最小的矩形,而不是包含给定的矩形.

这可以通过线性搜索/更新在O(n)时间内轻松解决,但是可以实现更好的结果吗?
我认为O(log n)是最优的.
插入和移除也必须比O(n)更快,因为在我的情况下这是任何用途.

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

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

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

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

最佳答案 这是一个尚未完全阐述的想法:

也许您可以使用具有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和h2< h – 三个选项:(> = w,< h),(< w,> = h),(> = w,> = h)
> w2> = w和h2< h – 两个选项:(> = w,< h),(> = w,> = h)
> w2< w和h2> = h – 两个选项:(< w,> = h),(> = w,> = h)
> w2> = w和h2> = h – 一个选项:(> = w,> = h)

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

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

点赞