我尝试使用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)。注意事件可能重叠。
答案 0 :(得分:4)
我刚刚遇到一种名为Baker-Bird algorithm的算法,似乎是将KMP局部概括为二维。它使用两个算法作为子程序 - Aho-Corasick algorithm(它本身就是KMP的推广)和KMP算法 - 有效地搜索二维网格中的模式。
我不确定这是否是您正在寻找的,但希望它有所帮助!