假设有两个矩阵A和B. 我想找到B的子矩阵的起始索引,它等价于矩阵A. 例如 -
matrix A=> 8 2
3 4
matrix B=> 1 2 6
9 8 2
1 3 4
回答是 - 位置矩阵B [2] [2]
答案 0 :(得分:1)
使用双循环扫描矩阵B.将搜索范围限制为由大小差异定义的左上方矩形。
使用另一个双循环检查相应的区域是否与A匹配。如果他们完全匹配,你就完成了;否则,继续1。
伪代码:
// 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
}
}
}