2013-10-03 116 views
2

如果存在阶m的矩阵A [] []和阶n的另一个矩阵B [] [],使得(m> n)必须找到矩阵B [ ] []在矩阵A [] []中。在另一个矩阵中快速找到矩阵

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(P^2 * N^2)O其中p = M-N + 1做到这一点。但我想用最小的时间复杂性来做到这一点。

+2

stackoverflow不做功课。复制你的algorythm,如果你希望我们帮你 – RamonBoza

+2

@RamonBoza这不是作业。这个问题在一个公司的书面考试中提出,我将在这个月出版。如果可以,请帮助我。 –

+0

@RamonBoza http://www.vyoms.com/placement-papers/details/nagarro-software-pvt-ltd-chennai-placement-paper-2011-7879.asp检查第二个问题。我可以通过蛮力来做到这一点。但我想用更好的时间复杂性来做到这一点。 –

回答

2

可以使用Boyer-Moore string search像这样的问题:

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

在下一行,你比较1 7 1出现在B,让你在A刚够在B 1是移动你的窗口在1。

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