zoukankan      html  css  js  c++  java
  • AC算法分析

    在计算机科学领域。AC字符串匹配算法是由Alfred V. Aho和Margaret J. Corasick发明的字符串搜索算法。该算法应用有限自动机巧妙地将字符比较转化为了状态转移。此算法有两个特点,一个是扫描文本时完全不需要回溯,另一个是时间复杂度为O(n),时间复杂度与关键字的数目和长度无关。

    直接实例分析吧。哈哈。

    子字符串 {a, ab, bc, bca, c, caa}

    A diagram of the Aho-Corasick string search algorithm.svg

    建立状态机,哈哈。怎么建立。根据子字符串建立啊。白色为已经匹配到子字符串了。该输出了。

    so。第一个节点是root节点。

    分析输入串 abccab
    节点 剩余字符串 输出:结束位置 变迁 输出
    () abccab   从root开始  
    (a) bccab a:1 () 到子节点 (a) 当前节点
    (ab) ccab ab:2 (a) 到子节点 (ab) 当前节点
    (bc) cab bc:3, c:3 (ab) 到词尾(b) 到子节点(bc) 当前节点, 词尾(等于输出c)
    (c) ab c:4 (bc) 到后缀 (c) 到词尾 ()到子节点 (c) 当前节点
    (ca) b a:5 (c) 到子节点 (ca) 词尾(就是输出a)
    (ab)   ab:6 (ca) 到词尾(a)到子节点 (ab) 当前节点
    备注:上面一幅图蓝线代表该找不到匹配节点时的节点变迁。黑线找到时的变迁。绿线代表词尾也是更小的字串输出。

    源码实现:(自己找一下)


  • 相关阅读:
    Sql Server截断日志(转)
    C#/VB.NET语法的比较(转)
    ReportViewer矩阵报表
    逐步学习 iPhone App 开发(1)
    一月二十四日,无家可归
    再见2009
    poj 1376 机器人广搜
    hdu 1004 颜色问题
    hdu 2734 简单地字符串处理
    1116 贪婪的送礼者
  • 原文地址:https://www.cnblogs.com/xiaokangzi/p/3576151.html
Copyright © 2011-2022 走看看