【发布时间】:2020-07-03 16:37:05
【问题描述】:
我在面试中被问到一个问题:
给定矩阵
A和矩阵B,我必须编写一个程序来找出矩阵B是否存在于矩阵A中。
问题是我必须在O(n) 时间内完成。这是我想出的唯一方法:
public class Matrix {
public static void main(String[] args) {
boolean flag = false;
int a[][] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}};
int b[][] = {
{11, 12},
{15, 16}};
for (int i = 0; i < a.length - b.length + 1; i++) {
for (int j = 0; j < a[0].length - b[0].length + 1; j++) {
if (a[i][j] == b[0][0]) {
flag = true;
for (int k = 0; k < b.length; k++) {
for (int l = 0; l < b[0].length; l++) {
if (a[i + k][j + l] != b[k][l]) {
flag = false;
break;
}
}
}
if (flag) {
System.out.println("i= " + i + " j= " + j);
return;
}
}
}
}
}
}
我不知道如何将其转换为O(n)。
有没有什么技术可以搜索O(n)中的大矩阵A中是否存在小矩阵B?
【问题讨论】:
-
假设 O(n) 表示矩阵大小是线性的,这可以通过散列来完成,您可以尝试查看 this
-
是
n“外”矩阵的线性大小(即矩阵为n x n)还是“外矩阵”的元素数(即n = m x m)?首先,我会说这是不可能的。
标签: java algorithm matrix multidimensional-array submatrix