我们有一个大小为NxM的矩形网格,其中的每个单元格都可以空闲或占用。可用单元格的数目或数量要远远大于被占用单元格的数目,因此我们将网格表示为已占用单元格的XY坐标列表。我们还假设占用的单元格具有一定的结构。
我们想找到一个最大的矩形,仅覆盖自由单元格。接下来,我们要找到另一个最大的矩形,该矩形不仅应仅覆盖空闲单元,而且不应与先前找到的矩形重叠。我们想找到所有给定阈值区域之内的矩形。
换句话说,我们想使用贪心算法找到一个覆盖最大自由单元格的矩形拼贴。
示例:
输入网格(0
-免费,x
-占用):
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
可以使用哪些算法来有效地解决此问题?乍一看,应该使用某种索引(例如四叉树)来获得针对大型M
和N
(例如数十万)的实际性能。解决方案不必是最优的,次优的,但在计算上也很有效。欢迎学术文献参考!
加分点:适用于2D和3D网格的通用方法(甚至可能适用于更高的尺寸)。