Algorithm 由矩形制成的形状中的最小矩形数?

Algorithm 由矩形制成的形状中的最小矩形数?,algorithm,geometry,Algorithm,Geometry,我不确定是否有一种算法可以解决这个问题 给定数量的矩形从左到右水平并排放置以形成形状。您将获得每个通道的宽度和高度 如何确定覆盖整个形状所需的最小矩形数? i、 你将如何使用尽可能少的矩形重新绘制此形状 我只能考虑尽可能多地挤压大矩形,但这似乎效率低下。 有什么想法吗 编辑: 给您一个数字n,然后是n个尺寸: 2. 1 3 2.5 上述两个矩形的尺寸为1x3和2x5,彼此相邻。 我想知道如果矩形不能重叠,我至少需要多少个矩形来重新创建那个形状 如果您想了解一般问题的算法概述,(由Tomas Su

我不确定是否有一种算法可以解决这个问题

给定数量的矩形从左到右水平并排放置以形成形状。您将获得每个通道的宽度和高度

如何确定覆盖整个形状所需的最小矩形数? i、 你将如何使用尽可能少的矩形重新绘制此形状

我只能考虑尽可能多地挤压大矩形,但这似乎效率低下。 有什么想法吗

编辑: 给您一个数字n,然后是n个尺寸: 2. 1 3 2.5

上述两个矩形的尺寸为1x3和2x5,彼此相邻。 我想知道如果矩形不能重叠,我至少需要多少个矩形来重新创建那个形状


如果您想了解一般问题的算法概述,(由Tomas Suk、Cyril Höschl和Jan Flusser撰写的文章)可能会有所帮助。它比较了不同的方法:行方法、四叉树、最大内接块、基于变换和基于图的方法

作为开胃菜的多汁身材(第11页):


图5:(a)实验中使用的二进制卷积核。(b) 它的10个GBD分解块。

由于矩形对齐良好,因此问题更容易解决。您可以简单地自下而上创建矩形。每次这样做时,它都会创建新的形状进行检查。好的是,你所有的新形状也将是基本对齐的,你可以根据需要重复


首先,要找到最小高度矩形。制作一个高度相同的矩形,宽度作为形状的总宽度。从形状的底部剪下那么多

您将得到多个形状。对于每一个,做同样的事情

查找最小高度矩形应为O(n)。因为你们对每一组都这样做,最坏的情况是所有不同的高度。总计输出至O(n2)

例如:

在图像中,每个形状的最小值以绿色亮显。生成的矩形右侧为蓝色。所需矩形的总数是图像中蓝色矩形的总数,7


请注意,我解释这一点的时候好像这些是物理矩形。在代码中,您可以完全取消宽度,因为它一点也不重要,除非您想要输出矩形,而不仅仅是计算它需要多少


您还可以将“制作一个矩形并将其从形状中剪切”简化为从构成该形状/子形状的每个矩形中减去高度。在这样做之后,每个具有+ve高度的形状的连续部分将组成一个新的子形状。

矩形是否允许重叠?假设你有一个固定区域,它们填充该区域的方式无关紧要,只要你占据了它们不能重叠的区域的100%@Sneftel@dbarnes是的,但我能使用的最小矩形数量是多少?从技术上讲,我可以使用1x1矩形来填充它,但如果可能的话,我想尽量减少矩形的数量。@finnw这个问题有一些不同。主要是,根据OP的编辑,矩形可能没有底部对齐,甚至没有连接。对于任意放置的矩形,这是有意义的。对于不重叠、基本对齐的组来说,这不是有点过分吗?@Geobits-看起来这个解决方案也假设不重叠。否则,它可以通过向上扩展绿色矩形,向下扩展橙色矩形,从而消除紫色矩形来进一步缩小。我的意思是源是非重叠矩形,而不是由没有给定对齐方式的重叠矩形组成的简单二值图像。给出的问题更简单,因为它们的放置方式有限制。我相信本文中的算法仍然适用于此,它们只是比必要的复杂得多。这将起作用,因为在任何步骤中,我们只能通过组合宽度进行优化。矩形的数量应至少等于楼梯中的台阶数量。