如何创建优化/合并磁贴集中磁贴的算法

时间:2019-05-12 16:53:06

标签: java algorithm

我的问题是我无法完全弄清楚如何创建一种将图块组合在一起以创建一个图块的算法。也许我用ms paint制作的这些图片可以帮助您了解我的意思。

我的想法是,有一个循环遍历每个图块,并在有另一个图块时创建关联。如下所示。

https://i.imgur.com/ifMUgdL.png

这种未知算法的预期结果应该是:

https://i.imgur.com/xtRJbEN.png

为澄清起见,每个图块都有一个x,y,w,h和sprite,它们当前是一个字符串目录,必将更改。

尽管我想听听背后的理论。该代码对我而言并不重要。预先感谢。

class Tile {

  float x, y, w, h;
  String sprite;

  Tile(float x, float y, float w, float h, String sprite) {
    // here be the initiating.
  }

}

结果应合并相同的图块,以提高加载图块的性能。考虑到这一点并尝试解决此问题也很有趣。预先感谢您。

祝你好运,祝你愉快!

添加的信息:

可以说有一个3 x 3的网格。如何将相同类型的多种颜色配对在一起,以使其中的配对数量最少。

https://i.imgur.com/B1K9R3q.png

那将是:

https://i.imgur.com/QfMGFYz.png

现在如果是13 x 5的网格怎么办?

https://i.imgur.com/p6arXvK.png

我想用一种算法为我解决这个问题,尽管我无法弄清楚。

摘要: 在具有不同图块的网格中创建最少数量的对。并在对象中保留最多的图块。

1 个答案:

答案 0 :(得分:1)

我在这里也很新,所以请不要过于苛刻地判断我的答案……

这是我的描述性解决方案:


第1步:

我们检测到每个单独的斑点(斑点是连接在一起的一块块,共享相同的颜色)。使用字典/哈希表可以有效地做到这一点。

第2步(贪婪算法):

然后,在每个Blob上运行以下过程。我们将其水平和垂直划分为几行。

如果两条连续的线“对齐”并具有相同的长度,则将它们合并以形成更大的图块,然后重复该过程。

如果下一行不符合此条件,则我们将收集到的行作为瓷砖平铺。

最后,我们将获得两种可能的切片分布结果。

第3步:

我们将水平扫描的输出与垂直扫描的输出进行比较。最终产生的结果将以瓷砖中产生最少的结果为准。


我相信通过动态编程获得最佳结果也是一种选择,但是这将花费很长时间并且无法达到整个目的(除非我缺少任何东西)。