有没有关于如何实施二维KMP的论文或解释?

时间:2012-02-15 22:51:11

标签: string algorithm full-text-search knuth-morris-pratt

我尝试使用Aho-Corasick和单维KMP的组合来解决二维搜索的问题,但是,我仍然需要更快的东西。

详细说明,我有一个大小为n1 * n2的字符矩阵A,我希望找到大小为m1 * m2的较小矩阵B的所有出现,我希望它在O(n1 * n2 + m1 * m2)如果可能的话。

例如:

A = a b c b c b
    b c a c a c
    d a b a b a
    q a s d q a

B = b c b
    c a c
    a b a

算法应返回匹配的索引,即匹配的左上角,在这种情况下应该返回(0,1)和(0,3)。注意事件可能重叠。

1 个答案:

答案 0 :(得分:4)

我刚刚遇到一种名为Baker-Bird algorithm的算法,似乎是将KMP局部概括为二维。它使用两个算法作为子程序 - Aho-Corasick algorithm(它本身就是KMP的推广)和KMP算法 - 有效地搜索二维网格中的模式。

我不确定这是否是您正在寻找的,但希望它有所帮助!