给出两个矩形,分别为M * N和X * Y.我们需要找到通过删除给定矩形的某些行和列可以获得的最大平方。它就像在2D中找到共同的序列。我知道如何在1维中进行,但如何针对此问题进行修改。
示例:
让第一个矩形为3 * 4
1 2 0 5
1 2 1 6
1 2 3 7
让第二个矩形为3 * 3
0 1 2
1 1 2
3 1 2
所以这里最大公共子方块的大小是2.
我们可以假设1≤N,M,X,Y≤700,并且两个矩形中的所有数字都是区间[1,1000]中的整数。
我正在寻找O(N ^ 3)解决方案。我目前的方法是尝试第一个网格中的每个方格,并尝试将其放入第二个网格中。这是非常耗时的,因为对于每个子方格你使用O(N ^ 3)然后为了查看天气它在第二个中的存在我们需要O(N ^ 2)。
答案 0 :(得分:2)
根据CLIQUE的减少,问题是NP难的:给定图G =(V,E),定义矩阵M_ij = 1,如果(i,j)在E中,则M_ii = 2除此之外,每个i和M_ij = 0。然后图表有一个k-Clique,即M的最大公共(方形)子矩阵和大小为k x k的矩阵A,其中只有一个具有大小为k。
找到问题的O(n ^ 3)算法将证明P = NP。