Algorithm 查找仅覆盖“的最大非重叠矩形序列”;“免费”;像素

Algorithm 查找仅覆盖“的最大非重叠矩形序列”;“免费”;像素,algorithm,geometry,language-agnostic,computational-geometry,Algorithm,Geometry,Language Agnostic,Computational Geometry,我们有一个大小为NxM的矩形网格,其中每个单元可以是空闲的,也可以是被占用的。自由单元的数量比占用单元的数量大得多,因此我们将网格表示为占用单元的XY坐标列表。此外,我们还假设被占据的细胞具有一定的结构 我们想找到一个只覆盖自由单元的最大矩形。接下来,我们想找到另一个最大的矩形,它不仅应该覆盖自由单元格,而且不应该与以前找到的矩形重叠。我们想要找到所有这样的矩形,直到给定的阈值区域 换言之,我们想找到一个矩形平铺覆盖最大面积的自由细胞使用贪婪算法 例如: 输入网格(0-空闲,x-占用): 溶液(

我们有一个大小为NxM的矩形网格,其中每个单元可以是空闲的,也可以是被占用的。自由单元的数量比占用单元的数量大得多,因此我们将网格表示为占用单元的XY坐标列表。此外,我们还假设被占据的细胞具有一定的结构

我们想找到一个只覆盖自由单元的最大矩形。接下来,我们想找到另一个最大的矩形,它不仅应该覆盖自由单元格,而且不应该与以前找到的矩形重叠。我们想要找到所有这样的矩形,直到给定的阈值区域

换言之,我们想找到一个矩形平铺覆盖最大面积的自由细胞使用贪婪算法

例如:

输入网格(
0
-空闲,
x
-占用):

溶液(单元格编号表示溶液矩形):

什么算法可以用来计算有效地解决这个问题?乍一看,应该使用某种索引(例如四叉树)来获得大型
M
N
(例如几十万)的实际性能。解决方案不必是最优的、次优的,但计算效率高的方法也很好。欢迎学术文献参考


优点:通用方法适用于二维和三维网格(甚至可能适用于更高维度)。

最佳一步解决方案似乎是。需要一种比在thereshold is metSO之前运行相同算法更好的方法,因此它不是一个真正的“为我编写此代码”网站,因此您最好向我们展示您的努力和遇到的问题,然后我们可以开始帮助您解决这些问题,而不是为您完成所有工作;-)@朱维安:我熟悉链式算法,但它不仅在时间上,而且在内存上都有二次困难,而我希望它有对数。非完美方法也适用于你的情况吗?我猜这个问题很难解决,在O(n²)以下就不可能找到最佳解决方案。但类似于近似的方法可能会更快。是的,我忘了提到它,次优解也很好。
0 0 0 0 0
0 0 0 0 0
x 0 x 0 0
0 0 x 0 0
0 0 0 0 0
1 1 1 1 1
1 1 1 1 1
x 0 x 2 2
3 3 x 2 2
3 3 0 2 2