zoukankan      html  css  js  c++  java
  • 浩爷AC自己主动机高速学习方案

        今天弄完自己主动机之后。从那天比赛的阴影中爬出来了,猛地一看真不咋滴难,细致一看这尼玛还不如猛的一看。

    。。

     

        必备算法:KMP,字典树(KMP我写了,字典树太简单,就是一个思想。我能够一个图教你做人)

     

        先讲一下字典树:看图

        好了。字典树就看酱紫一个图,你要是脑残就装不懂吧!

     

       以下是AC自己主动机的正题:

        正如KMP中的求next函数是相同的一个原理

        节点的属性:二十六个字母的指针。fail指针,其它。。。

        重点:fail指针,我把它叫做同级指针,我来教你怎么理解,KMP中求出来的next函数的值表示的是当前字符之前的最长同样前后缀。你能够想想,一个字符串,前缀是不包含最后一个字符的,后缀是不包含第一个字符的。而后缀都匹配成功了,前缀难道会不成功?所以依据next值跳转的位置之前的字符串一定是出现过的,假设有多个,则会从长到短一次相连。你自己写一个就会发现的,而我把next就叫做同级指针。当前位置匹配成功,同级指针指向的位置也一定是成功了的。

        AC自己主动机算法就是在你构建的字典树上面加操作求同级指针fail。

        求同级指针:

        1.初始化:NULL

        2.根节点以下第一层节点指向根节点(你第一个都匹配失败了,你还想匹配别的?)

        3.其它节点的同级指针的求法:找到当前节点上一层节点同级指针中近期的那一个(同级节点会非常多。想next函数一样。直接指向长的串的,短的一次由长的指着),要求那个同级指针的下一层也有当前字符存在。这时就把当前节点的fail仅仅想上一层近期的匹配成功的同级节点以下的那个节点。。。

    假设一直没有匹配成功,最后会跳到root。然后跳到NULL。这是直接仅仅想root就是了。。

        以下又是一张屌丝的犀利自拍图:

        AC自己主动机真的不难。对照一下KMP。你会发如今理解上面已经熟练了。剩下的就是组织代码了。刚AC的HDU--2222是个不错的例题,反正网上代码也多,參考一下。然后组织自己的编码风格,这个算法你就过关了。后面的就靠你去举一反三了。。亲。祝你好运。

     

     

  • 相关阅读:
    【转载】关于sql server 代理(已禁用代理xp)
    Silverlight中将WriteableBitmap互转byte数组
    思迅Pay PC ,WIN7 ,KB3042058
    微软新Edge浏览器 WIN7 无法登录
    List<SelectListItem> 转为 SelectList
    图片jpg,png转为BASE64编码
    “Newtonsoft.Json”已拥有为“Microsoft.CSharp”定义的依赖项。
    mac os 10.15.1 懒人 .CDR
    微信刷脸SDK获取sub_openid
    win7 安装 visual studio 2019 时闪退(VS2019)
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6984972.html
Copyright © 2011-2022 走看看