我有一个很大的n*m矩阵S。我想有效地确定在F中是否存在子矩阵S。大矩阵S的大小可以和500*500一样大。
为澄清这一问题,请考虑以下几点:
S = 1 2 3
4 5 6
7 8 9
F1 = 2 3
5 6
F2 = 1 2
4 6在这种情况下:
F1在S里面F2不在S里面矩阵中的每个元素都是32-bit整数。我只能用蛮力的方法来找出F是否是S的子矩阵。我在谷歌上搜索了一种有效的算法,但什么也找不到。
是否有更快的算法或原则呢?(或者可能是某种优化蛮力方法的方法?)
PS统计数据
A total of 8 S
On average, each S will be matched against about 44 F.
The probability of success match (i.e. F appears in a S) is
19%.发布于 2013-05-25 15:05:22
它涉及到对矩阵的预处理。这将沉重的内存,但它应该是更好的计算时间。
发布于 2013-05-25 14:59:15
如果要多次查询同一个大矩阵和相同大小的子矩阵,请执行以下操作。大矩阵的预处理有很多种解决方案。
这里有一个类似的(甚至相同的)问题。
发布于 2013-05-25 15:17:07
因为你只想知道给定的矩阵是否在另一个大矩阵中。如果您知道如何使用C++中的Matlab代码,则可以直接使用Matlab中的ismember。另一种方法可能是在Matlab中尝试找出ismember是如何工作的,然后在C++中实现相同的内容。
https://stackoverflow.com/questions/16750739
复制相似问题