如何将给定的2d矩阵与另一个2d矩阵的子矩阵相匹配?

时间:2016-04-09 19:07:59

标签: algorithm matrix

假设有两个矩阵A和B. 我想找到B的子矩阵的起始索引,它等价于矩阵A. 例如 -

matrix A=>  8 2
            3 4

matrix B=> 1 2 6
           9 8 2
           1 3 4

回答是 - 位置矩阵B [2] [2]

1 个答案:

答案 0 :(得分:1)

  1. 使用双循环扫描矩阵B.将搜索范围限制为由大小差异定义的左上方矩形。

  2. 使用另一个双循环检查相应的区域是否与A匹配。如果他们完全匹配,你就完成了;否则,继续1。

  3. 伪代码:

    // Helper 
    bool checkMatch(int by, int bx) {
      for (int ay = 0; ay < ah; ay++) {
        for (int ax = 0; ax < aw; ax++) {
          if (a[ay][ax] != b[by + ay][bx + ax]) {
            return false;
          }
        }
      }
      return false;
    }
    
    // Scan loop
    for (int by = 0; by < bh - ah; by++) {
      for (int bx = 0; bx < bw - aw; bx++) {
        if (checkMatch(by, bx)) {
          println("Found: " + bx + " + by);
          // stop here if one occurence is enough
        }
      }
    }