在MXN矩阵中查找amxn子矩阵的最快方法

kno*_*ker 17 c c++ algorithm matrix

我正在考虑一种在较大的mtrix M中寻找子矩阵m的快速方法.我还需要识别部分匹配.

我能想到的几种方法是:

  1. 优化正常的暴力以仅处理增量行和列.
  2. 可能会将Rabin-karp算法扩展到2-d但不确定如何处理它的部分匹配.

我相信这是图像处理中经常遇到的问题,如果有人可以投入他们的意见或指向我关于这个主题的资源/论文,我将不胜感激.

编辑: 较小的例子:

更大的矩阵:
1 2 3 4 5
4 5 6 7 8
9 7 6 5 2

较小的矩阵:
7 8
5 2

结果:(行:1列:3)

较小矩阵的一个例子,它在(1,3):
7 9
5 2 处有资格作为部分匹配

如果超过一半像素匹配,则将其视为部分匹配.

谢谢.

LiK*_*Kao 1

如果您愿意预处理矩阵并且对同一矩阵有很多查询,则可以使用非常快速的算法。

查看多媒体数据库研究小组(波恩大学克劳森教授)关于代数数据库的论文。例如,看看这篇论文:http://www-mmdb.iai.uni-bonn.de/download/publications/sigir-03.pdf

基本思想是推广倒排表,因此它们使用任何一种代数变换,而不是像普通倒排表那样仅向一个方向移动。

这意味着只要您需要对输入数据进行的修改可以通过代数建模,这种方法就可以发挥作用。具体来说,以任意数量的维度进行平移、旋转、翻转等的查询都可以被检索。

这篇论文主要展示了音乐数据的这一点,因为这是他们的主要研究兴趣,但您也许可以找到其他人,其中也展示了如何使其适应图像数据(或者您可以尝试自己适应它,如果您了解原理就很简单了)。

编辑

如果你正确定义它们,这个想法也适用于部分匹配。