在另一个矩阵中快速找到矩阵

时间:2013-10-03 07:57:41

标签: java algorithm

如果存在阶数为m的矩阵A [] []和阶数为n的另一个矩阵B [] [],则(m> n)必须在矩阵A中找到矩阵B [] []的出现[] []。

A[5][5]=
 1,2,3,4,5
 5,4,1,9,7 
 2,1,7,3,4
 6,4,8,2,7
 0,2,4,5,8

B[3][3]=
 1,9,7
 7,3,4
 8,2,7

这个矩阵B存在于A.我可以通过滑动窗口算法TC O(p ^ 2 * n ^ 2)来实现,其中p = m-n + 1。但我希望以最小的时间复杂度来做到这一点。

2 个答案:

答案 0 :(得分:2)

你可以使用Boyer-Moore string search来解决这个问题:

从右到左比较。在第一行中,您将3与7进行比较.3未显示在B的第一行中,因此您可以将窗口向右移动3个元素。再次启动循环时,窗口不适合A第一行的剩余部分。这意味着您可以使用2比较处理第一行。

在下一行中,您将1与7进行比较.1显示在B中,因此您移动窗口的距离应足以使B中的1超过A中的1。

然后,下一个级别将开始与B的右下角进行比较。这会将7与7进行比较。由于7在B中出现了三次,你必须弄清楚如何使用与Boyer-Moore类似的规则有效地移动窗口。

答案 1 :(得分:0)

我之前在堆栈溢出中找到了一个摘要。希望这能为您提供可以使用的算法和方法。 An algorithm for searching for a two dimensional m x m pattern in a two dimensional n x n text is presented