Ac算法分析

分析文档下载地址:http://download.csdn.net/source/3449024 

1、首先利用acsmNew 初始化结构体ACSM_PATTERN,ACSM_STATETABLE,ACSM_STRUCT,其中ACSM_PATTERN保存每个字符串,在函数acsmAddPattern中采用倒插法将3个字符串做成一个链表

typedef struct _acsm_pattern {      

    struct  _acsm_pattern *next;
    unsigned char         *patrn;
    unsigned char         *casepatrn;
    int      n;
    int      nocase;
    void   * id;
    int         nmatch;

} ACSM_PATTERN;


typedef struct  {    

    /* Next state - based on input character */
    int      NextState[ ALPHABET_SIZE ];  

    /* Failure state - used while building NFA & DFA  */
    int      FailState;   

    /* List of patterns that end here, if any */
    ACSM_PATTERN *MatchList;   

}ACSM_STATETABLE;


/*
* State machine Struct
*/
typedef struct {

    int acsmMaxStates;  
    int acsmNumStates;  

    ACSM_PATTERN    * acsmPatterns;
    ACSM_STATETABLE * acsmStateTable;

}ACSM_STRUCT; 

2、利用acsmCompile 函数生成状态表同时将NFA转换为DFA,生成状态表信息中包含,每个状态在256个字符路径上的下一个状态跳转,没有跳转的值为-1,同时将pattern中的字符串链表拷贝到状态表的Matchlist中;由NFA生成DFA主要是将所有路径上无下一个状态值-1替换为0,将每个状态的失效状态记录到Failstate默认是0,同时将失效状态的字符串拷贝到Matchlist链表中。

3、调用acsmSearch 搜索所有文本文件中的内容,如果状态的Matchlist不为空则输出相应状态值,直到字符串匹配完成,输出匹配结果。

例如{“he”,"she","his"}模式生成状态机过程举例请参考PPT文档


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值