一尘不染

使用大型密集2D矩阵快速计算2D子矩阵?

algorithm

在较大的密集矩阵中计算子矩阵的好算法是什么?如果只有一行数据,则可以使用后缀树,但是我不确定将后缀树归纳为更高维度是直接的还是最好的方法。

有什么想法吗?

我朴素的解决方案是对稠密矩阵的第一个元素建立索引并消除全矩阵搜索,这对全矩阵扫描仅提供了适度的改进。

解决此问题的最佳方法是什么?

Example:

Input:

Full matrix:
123
212
421

Search matrix:
12  
21

Output:
2

此子矩阵在完整矩阵中出现 两次
,因此输出为2。完整矩阵可能是1000x1000,但是,搜索矩阵的大小为100x100(可变大小),因此我需要在其中处理多个搜索矩阵一排。太好了,这个问题的蛮力太低了,无法满足我几秒钟的搜索时间。


阅读 261

收藏
2020-07-28

共1个答案

一尘不染

在算法课程中,我曾经做过一个练习,其中必须稍微扩展Rabin-
Karp
字符串搜索算法,以您描述的方式搜索匹配的二维子矩阵。

我认为,如果您花时间了解Wikipedia上描述的算法,那么将其扩展为二维的自然方法将很清楚。本质上,您只需对矩阵进行几次遍历,一次沿一列爬行。有一些小技巧可以将时间复杂度保持在尽可能低的水平,但是您甚至可能根本不需要它们。

在N×N矩阵中搜索M×M矩阵,此方法应为您提供O(N²⋅M)算法。通过技巧,我相信可以将其精炼为O(N²)。

2020-07-28