我一直在寻找一种基于邻居对对象进行分组的算法。我看过kd树和四叉树,但是我确定有人已经知道了我的确切情况,并且知道我应该使用的确切算法。
我有一些街区,我需要对它们进行分组以使街区数最少。
假设在左侧图像上所有图块均为1x1块。我想有一种算法可以对它们进行分组,这样我就可以拥有尽可能少的块,可以缩放,并且不必是正方形(它们可以是矩形)。
未分组的框
该算法可以返回的示例
(请注意,这可能不是完美的解决方案,因为我没有检查所有可能性)
我可能最终将用这些块创建一个数组,其中1将是一个块,而0将是虚无。像这样:
[0, 1, 0, 0, 1, 0, 0, 0]
[0, 1, 1, 1, 1, 1, 1, 1]
[0, 1, 1, 1, 1, 1, 1, 0]
[0, 0, 1, 1, 1, 1, 0, 0]
[0, 0, 0, 1, 1, 0, 0, 0]
块始终具有整数比例,没有浮点值。 我还没有任何身高,所以我们可以认为一切都是平坦的。 我也知道我不会有多个“孤岛”,所有的块都连接在一起。
这样做是出于性能考虑(它将在移动设备上运行)。如果对于运行时来说太复杂或太繁琐,我会想出另一种方法,我只想知道这种情况是否有简单的解决方案。
谢谢!