我的输入是一个2D锯齿状数组,它包含一些可变长度的行。我想将它转换为2D矩形非重叠数组列表(其行具有相同的长度,没有整数),我需要知道这些矩形数组在锯齿状数组中的位置。
您可以看到预期结果here,每个矩形阵列都有不同的颜色。
这是输入的一个例子:
[ ][ ][ ][ ][ ][ ][ ][ ]
[ ][ ][ ][X][ ][ ][ ][ ]
[ ][X][X][X][X][X][X][X]
[ ][ ][X][X][X][X][ ][ ]
[ ][X][X][X][X][ ][ ][ ]
[ ][X][X][X][X][ ][ ][ ]
[ ][ ][X][ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ][ ][ ][ ]
我在输出中得到了这个:
[ ][ ][ ][ ][ ][ ][ ][ ]
[ ][ ][ ][A][ ][ ][ ][ ]
[ ][B][G][G][G][F][E][E]
[ ][ ][G][G][G][F][ ][ ]
[ ][D][G][G][G][ ][ ][ ]
[ ][D][G][G][G][ ][ ][ ]
[ ][ ][C][ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ][ ][ ][ ]
StackOverflow上有几个类似的问题here(主要关注它是否为NP难),here(仅查找最大的矩形),here(寻找一些矩形)和here(不同的性能需求,效率对我来说更重要)。
我花了几个月的时间编写并在Java中实现我自己的算法,因为你可以看到here但是效率非常低,它会花费几天的时间在输入中提供大约600个256 * 256数组。我还没有评估this source code。
是否有更快的算法将锯齿状数组转换为矩形数组列表及其在这个锯齿状数组中的位置?