我想在2d数组中识别2d数字(例如俄罗斯方块数字,其中1表示填充块,0表示空平面)(随机播种0和1)。有没有一般方法?第一个想法是迭代源数组,假设A [i,j]是预期数字的原点,并将派生数字与参考数字进行比较。
对于100x100阵列和10x10数字,这将需要(100-10)*(100-10)= 8100次操作,这通常意味着O = n ^ 2,因为我可以有很多数字吗?当然可以应用缓存,我们可以尝试仅对“脏”部分进行迭代......
但是我认为应该存在更好的解决方案。有人能指出他们吗?
答案 0 :(得分:1)
我将采用的一般方法也是O(n ^ 2),但似乎在数字(多联骨牌)的数量上比在数量上更多。
迭代每个块,如果已设置(即:其值为1),请查看其4个连接的相邻网格单元。从此(以及任何其他连接的相邻单元格),您应该能够确定它是什么形状,并且可以将这些单元格标记为已观察,因此您可以在迭代它们时跳过它们。通过这种方式,您可以依次查看每个单元格,但大多数代码仅在您在单元格中主动查找tromino时执行。
我认为网格中的数字是否提前知道是否重要。