首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一个大矩阵中找到一个矩阵

在一个大矩阵中找到一个矩阵
EN

Stack Overflow用户
提问于 2013-05-25 14:53:25
回答 9查看 13.2K关注 0票数 7

我有一个很大的n*m矩阵S。我想有效地确定在F中是否存在子矩阵S。大矩阵S的大小可以和500*500一样大。

为澄清这一问题,请考虑以下几点:

代码语言:javascript
复制
S = 1 2 3 
    4 5 6
    7 8 9

F1 = 2 3 
     5 6

F2 = 1 2 
     4 6

在这种情况下:

  • F1S里面
  • F2不在S里面

矩阵中的每个元素都是32-bit整数。我只能用蛮力的方法来找出F是否是S的子矩阵。我在谷歌上搜索了一种有效的算法,但什么也找不到。

是否有更快的算法或原则呢?(或者可能是某种优化蛮力方法的方法?)

PS统计数据

代码语言:javascript
复制
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%.
EN

回答 9

Stack Overflow用户

发布于 2013-05-25 15:05:22

它涉及到对矩阵的预处理。这将沉重的内存,但它应该是更好的计算时间。

  • 检查之前,检查子矩阵的大小是否小于矩阵的大小。
  • 在构造矩阵时,构建一个构造,将矩阵中的值映射到矩阵中的(x,y)位置数组。这将允许您检查是否存在一个候选可以存在的子矩阵。您将在子矩阵中使用(0,0)的值,并得到该值在较大矩阵中的可能位置。如果职位列表为空,则没有候选人,因此子矩阵不存在。这是一个开始(然而,更有经验的人可能认为这是一种天真的方法)。
票数 2
EN

Stack Overflow用户

发布于 2013-05-25 14:59:15

如果要多次查询同一个大矩阵和相同大小的子矩阵,请执行以下操作。大矩阵的预处理有很多种解决方案。

这里有一个类似的(甚至相同的)问题。

Fastest way to Find a m x n submatrix in M X N matrix

票数 1
EN

Stack Overflow用户

发布于 2013-05-25 15:17:07

因为你只想知道给定的矩阵是否在另一个大矩阵中。如果您知道如何使用C++中的Matlab代码,则可以直接使用Matlab中的ismember。另一种方法可能是在Matlab中尝试找出ismember是如何工作的,然后在C++中实现相同的内容。

请参阅Find location of submatrix

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16750739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档