1
寻找最少的矩形以覆盖一组矩形而不重叠的算法
我有一组矩形,我想“减少”该矩形,所以我用最少的矩形来描述与原始矩形相同的区域。如果可能的话,我希望它也很快,但是我更关心的是使矩形的数量越少越好。我现在有一种方法在大多数时间都有效。 目前,我从最左上角的矩形开始,看看是否可以在保持矩形的同时向右和向下扩展它。我这样做直到它无法再扩展,然后删除并拆分所有相交的矩形,然后将扩展的矩形添加回列表中。然后,我使用最左上角的下一个矩形再次开始该过程,依此类推。但是在某些情况下,它不起作用。例如: 使用这组三个矩形,正确的解决方案将以两个矩形结束,如下所示: 但是,在这种情况下,我的算法从处理蓝色矩形开始。这会向下扩展并分裂黄色矩形(正确)。但是,当处理完黄色矩形的其余部分时,它没有向下扩展,而是先向右扩展,然后取回先前拆分的部分。然后处理最后一个矩形,它不能向右或向下扩展,因此保留了原来的矩形集。我可以调整算法,使其首先向下扩展,然后再向右扩展。这样可以解决这种情况,但是在翻转的类似情况下会导致相同的问题。 编辑:只是为了澄清,原始的矩形集不重叠,也不必连接。如果连接了矩形的子集,则完全覆盖矩形的多边形可能会在其中带有孔。