
该算法对4×4矩阵和2×2子矩阵进行了硬编码。否则,它看起来像蛮力算法。
我会这样表示:
outerRow:for (int or = 0; or <= a.length - b.length; or++) { outerCol: for (int oc = 0; oc <= a[or].length - b[0].length; oc++) { for (int ir = 0; ir < b.length; ir++) for (int ic = 0; ic < b[ir].length; ic++) if (a[or + ir][oc + ic] != b[ir][ic]) continue outerCol; System.out.println("Submatrix found at row " + or + ", col " + oc); break outerRow; }}如果您想要更有效的方法,建议您将它们压扁,如下所示:
{ 2,3,5,7, 5,8,3,5, 7,6,9,2, 3,8,5,9 }并在此序列中搜索以下模式:
{ 9,2, _, _, 5, 9}使用标准的查找子字符串技术,例如Aho-
Corasick或Knuth-
Morris-
Pratt算法。(请注意,您必须跳过一些索引,以避免在序列中间出现新行的情况下误报。)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)