0

在 JavaScript 中,我试图找到这个二维整数数组的所有匹配坐标:

在此处输入图像描述

在这个 2D 整数数组中,计算重叠的子数组:

在此处输入图像描述

每个图像代表一个 2D JavaScript 整数数组,黑色像素对应1,黄色像素对应0,但我以这种方式描述了数组,以便它们更容易可视化。

那么如何在数组中找到数组的所有匹配在此处输入图像描述在此处输入图像描述

这是我要实现的功能:

findAllMatchesOfOne2DArrayInsideAnother2DArray(containedArray, containingArray){
    //find all matching coordinates of containedArray inside containingArray, and return a 2D array of coordinates
}
4

1 回答 1

2

这是一种在另一个二维数组中获取任何给定二维数组的所有出现的方法。假设所有子数组都具有相同的维度(与 不同[[1,0,0],[1,0]])。

var x = [[0,1,0,0,0,0,0],
        [1,1,1,0,0,1,0],
        [0,1,0,0,1,1,1],
        [0,0,0,0,0,1,0],
        [0,0,1,0,0,0,0],
        [0,1,1,1,0,0,0],
        [0,0,1,0,0,0,0]];

var y = [[0,1,0],[1,1,1],[0,1,0]];

var res = [];
for (var i = 0; i < x.length - y.length + 1; i++) {
    for (var k = 0; k < x[0].length - y[0].length + 1; k++) {
        var count = 0;
        for (var l = 0; l < y.length; l++) {
             for (var m = 0; m < y[l].length; m++) {
                count += Math.abs(y[l][m] - x[i + l][k + m]);
            }       
        }
        if (count === 0) {
            res.push([i, k]);
        }

    }
}

该数组res将包含每个匹配项左上角的“坐标”。我相信你会找到性能更好的算法,但这个似乎工作:)

于 2013-05-15T23:54:26.120 回答