021-3391 0332ENGLISH

杏彩体育平台app字符串匹配算法 kmp和有限自动机字符串匹配「FA

  模式匹配(Pattern Matching):在一篇长度为n的文本S中,找某个长度为m的关键词P。P可能多次出现,都需要找到。对于最优的模式匹配算法来说,至少需要检索文本S的n个字符和关键词P的m个字符,即复杂度至少是

  KMP是一种在任何情况下都能达到O(n+m)复杂度的算法。它通过分析P的特征对P进行预处理,从而在与S匹配的时候能够跳过一些字符串,达到快速匹配的目的。

  KMP的核心是Next[]数组。当出现失配后,进行下一次匹配时,用Next[]指出j回溯的位置。Next[]是通过对P进行预处理得到的。

  AC自动机(Aho-Corasick automaton)是KMP的升级版。KMP是单模式匹配算法,处理在一个文本串中查找一个模式串的问题;AC自动机是多模匹配算法,能在一个文本串中同时查找多个不同的模式串。

  多模匹配问题:给定一个长度为n的文本S,以及k个平均长度为m的模式串P1,P2,…,Pk,要求搜索这些模式串出现的位置。

  KMP是通过查找P对应的Next[]数组实现快速匹配的。若把所有的P做成一个字典树,然后在匹配的时候查找这个P对应的Next[]数组,这就实现了快速匹配的效果。

  复杂度分析:k个模式串,平均长度为m;文本串长度为n。建立字典树O(km);建立fail指针O(km);模式匹配O(nm),乘m是因为在统计的时候需要顺着链回溯到root结点。总时间复杂度是O(km+km+nm)=O(km+nm)。

  若直接对每个分别做一次KMP,总复杂度为O((n+m)k),当m\ll k时,AC自动机的优势就很大。


杏彩体育平台app 上一篇:2022年软件设计师考试知识点:有限自动机 下一篇:当年汉兰达加价提车现在来了个日产探陆致其腹背受敌?

相关推荐