字典树 AC自动机

字典树:

         以树的形式存储字符串。便于进行快速检索以及最长公共前缀的获得。

         结构体的构造:

         ① struct node{

                  int count;

                  node *next[26];

                  }

 

         ② struct node{

                  int count;

                  int next[26];

                 }

 

      

        

 

AC自动机:

              字典树与KMP算法的结合。一般用于在一段字符串中查找多个模式串。

          

步骤:

            1. 将所有的模式串构造成一棵字典树;

            2. 为树上的每一个节点构造其FAIL指针(方法下述);

            3. 将文章与树开始进行匹配。每到一个不匹配的地方,就把匹配的文章与其fail指针指向的树的节点进行匹配;如果在过程中发现匹配节点返回到了根,且一直没变,则说明文章中存在某个或些字符串与模式串不能匹配,需要将文章中的指针向后移动。

            4. 每当匹配到树上的count值上一个节点大于下一个节点,就说明一个模式串匹配成功;

            5. 直到文章匹配结束。

 

            fail指针的构造:

            1. 根节点的fail指针指向本身。

            2. 其他节点的fail指针,如果其父节点的fail指针指向的节点的子节点与其值相等,则将其fail指针指向它;否则,向上寻找其父节点的fail指针的fail指针,直到找到为止,或者直到指向根节点。

 

 

posted on 2012-07-10 22:43  yumao  阅读(219)  评论(0编辑  收藏  举报

导航