Matrix67的OI点滴(三)KMP算法.doc

Matrix67的OI点滴(三)KMP算法.doc

Matrix67的OI点滴(三):KMP算法 ??? 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。 ? ??? 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法。KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串)。比如,字符串A=Im matrix67,字符串B=matrix,我们就说B是A的子串。你可以委婉地问你的MM:“假如你要向你喜欢的人表白的话,我的名字是你的告白语中的子串吗?” ??? 解决这类问题,通常我们的方法是枚举从A串的什么位置起开始与B匹配,然后验证是否匹配。假如A串长度为n,B串长度为m,那么这种方法的复杂度是O(mn)的。虽然很多时候复杂度达不到mn(验证时只看头一两个字母就发现不匹配了),但我们有许多“最坏情况”,比如,A=aaaaaaaaaaaaaaaaaaaaaaaaaab,B=aaaaaaaab。我们将介绍的是一种最坏情况下O(n)的算法(这里假设m=n),即传说中的KMP算法。 ??? 之所以叫做KMP,是因为这个算法是由Knuth、Morris、Pratt三个提出来的,取了这三个人的名字的头一个字母。这时,或许你突然明白了AVL树为什么叫AVL,或者Bellman-Ford为什么中间是一杠不是一个点。有时一个东西有七八个人研究过,那怎么

文档评论(0)

1亿VIP精品文档

相关文档