假设一个布尔数组,如:
1111
1111
1110
1111
1001
现在你需要找到排列任意大小的最小矩形的方法来实现这个形状。因此,例如,您会发现:
+-++
| |+
| |
+-++
+ +
其中 + 是矩形的角,|, - 矩形的边框。
我想做的是从最大可能的矩形开始,检查数组中是否有可以放置的位置,矩形覆盖的每个数组元素都是真的。如果存在这样的地方,则该矩形将被添加到列表中。之后,我们检查数组的左侧空间是否有另一个位置可以放置矩形,然后减小矩形的大小并使用剩余空间重复该过程,直到大小为 0。
这应该会产生很好的结果,因为我们总是从大矩形开始,我们当然可以使用更少的矩形,这反过来意味着我们使用了少量的矩形。
但是,这只是我想到的一个概念,还没有付诸实践。这似乎效率很低,所以我想知道是否有任何已知的快速算法来实现这一点?