如何扩展rabin karp以在nxn个字符中查找mxm模式?
任何人都可以提出伪代码吗?并且会对算法的时间复杂度产生任何影响吗?
答案 0 :(得分:3)
一种方法分三步:
1)对于每条水平线,使用Rabin-Karp滚动哈希来计算哈希值,该哈希值覆盖沿该线长度为k的每个连续哈希字符段。
2)对于每一列,使用列中的Rabin-Karp滚动哈希来获取步骤(1)中计算的哈希值,以获得长度为k的连续文本,这些文本位于彼此的上方和下方,并计算组合哈希值对应于文本矩形的值。
3)像以前一样查找那个矩形文本。
在步骤2中,我们从步骤1产生的形式X [0] + X [1] * P + X [1] * P ^ 2 + ...的值开始。如果使用乘数P ^ k对于第二步,你应该能够在矩形上使用哈希函数,如果你将矩形重新排列成一条线,计算一个长的Rabin-Karp哈希值。
如上所述,您需要足够的商店来保存所有矩形输入的哈希值。应该很容易将其减少到足够的存储空间来保存沿输入运行的哈希值矩形,但只能与您搜索的模式一样深。如果你把它放在心上,可能会做得更好,并做了一点点计算。显然,您可以在搜索之前将区域划分,然后再按照划分边界重做方块的费用。