Advertisement

矩阵匹配AC自动机或二维Hash UVa 11019- Matrix Matcher

阅读量:

题意:提供一个nm的字符矩阵T,目标是确定给定的xy字符矩阵P在T中出现的次数。

分析:若要实现完整的矩阵匹配,必须确保每一行均满足匹配条件。因此,可将P中的每一行视为独立的模式串,构建AC自动机结构。随后,在T中的每一行依次进行匹配操作,从而获取P中各行在T中所有可能的匹配位置。

在匹配过程中增加相应的处理步骤,即可将单行匹配结果组合成完整的矩形区域。定义一个二维数组count[r][c],用于记录以T中(r,c)位置为右上角、且与P尺寸相同的矩形区域内,有多少行与P对应位置的行完全一致。当P的第i行在T的第r行中被识别出起始列编号为c时,则应将count[r-i][c]对应的数值增加1。完成所有匹配操作后,所有满足count[r][c]=X的位置即为二维匹配点。

注意:由于可能存在多个相同的模式串,因此需要借助链表结构对相同内容进行管理。

复制代码
 #include <cstdio>  
    
 #include <cstring>  
    
 #include <queue>  
    
 using namespace std;  
    
   
    
 const int MAXNODE = 10005;  
    
 const int SIGMA_SIZE = 127;  
    
 const int N = 1005;  

全部评论 (0)

还没有任何评论哟~