【发布时间】:2020-04-08 17:14:26
【问题描述】:
我正在寻找一种算法,它采用一个矩阵(实际上是一个复式数组)并返回一个矩阵数组: 是正方形(宽度 = 高度) 矩阵中的所有元素都具有相同的值。 我不知道这是否清楚,所以想象一下你有一个由红色、蓝色或绿色像素组成的图像,我想得到一个包含尽可能少的正方形的数组。如图所示
编辑:
好的,也许不清楚:我有一个元素网格,可以有一些类似的值:
0011121
0111122
2211122
0010221
0012221
那是我的输入,我想要输出类似的东西:
|0|0|111|2|1|
|0|1|111|22|
|2|2|111|22|
|00|1|0|22|1|
|00|1|2|22|1|
当每个 |X|是一个数组,它是输入数组的一部分。 我的目标是尽量减少输出数组的数量
【问题讨论】:
-
为什么第一行有 |0|0|两个数组和第四行 |00|一个数组?我以为你是在对相似的字符进行分组。
-
更新很好(与图片相同),一个选项是使用所描述的提示,您需要一个适当的分组算法(输出)。这是关于边界的一些工作,因为正方形会产生间隙...(一个正方形,是否还应检查间隙和间隙是否有可能的内部正方形...)
-
@SyedAfzal,第一行输出为 2 个数组 [0],[0] 因为是 1 x 1 的正方形(这是这里可能的最大正方形)。第四行输出(与第五行)为 1 个大数组 [[0,0][0, 0]] 因为在这里,可能的最大正方形是 2 x 2 正方形。
-
@TraianGEICU 感谢您的回答和提示。是的,间隙是该算法中的一个“问题”。你不知道可以解决我的问题的“分组”算法吗? (对于寻路,我们有 A*,...),但是是否有现有的算法可以解决这个问题?
-
不知道是否有任何标准算法,但听起来更像是压缩。 30 年前遇到类似的事情,但输入是连续出现的数组....任何方式都可能进一步研究相似性是个好主意。