KMP算法分析算法设计.docVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
KMP算法分析算法设计

KMP算法分析 王法金 (安徽中医学院,医药信息工程学院,安徽 合肥 230031)) 摘 要:随依靠软件来检测,是越来越显得力不从心。伴随着FPGA技术的发展,在硬件上实现模式匹配,来提高网络数据处理速度的需求越来越普遍。把搜索算法固化到FPGA里,从而可以大大提高算法的速度,适应科技的迅速发展。 综合考虑现有的比较成熟的模式匹配算法,并且追踪国外基于FPGA技术来实现模式匹配的研究成果,认为在硬件实现方面,KMP算法效率较高,结构简单,可行性强,而且易于对主串进行多模式的匹配,所以选其作为模式匹配硬件模块的核心算法,通过硬线逻辑来进一步提高串模式匹配的效率。本文KMP算法程序设计部分主要分为三个部分:模式串输入、next函数的计算、字符串的匹配。着网络技术的迅猛发展,所要检测的数据包越来越多,通过上网和查阅相关文献,我了解到如果单纯的 关键词:模式匹配算法;; 中图分类号:T 文献标识码:A 文章编号:1003-5060(2009)10-0000-0Hefei 230031, China) Abstract:This part of KMP Algorithm Programming is divided into three parts: the pattern string entered, next function calculation, string matching. Key words:Pattern matching algorithm;;引 言 1.1 模式匹配定义 字符串的模式匹配问题的形式化定义如下: 在字符集Σ上,给定一个长度为N的文本字符串T[1…N],以及一个长度为M的模式 字符串Pi[1…M]。模式集数量用k来表示,模式集用P={pl,p2…,pk}来表示。如果对于l=S=N,存在T[S+1…S+M]=Pi[1…M],则模式Pi在文本T的位置S处出现,即模式与文本匹配。字符串的模式匹配问题就是要寻找P在T中是否出现,以及出现的位置。 1.2单模式匹配 KMP算法是Knuth等人在BF算法的基础上提出来的。从本质上讲,KMP算法就是出现不匹配情况下带有智能指针初始化的BF算法。为了在不匹配时重新定位指针,KMP算法需要进行预处理算出一个Shift表来。 基本思想:KMP算法利用已匹配成功部分的信息,即前缀(模式字符串中存在的相同子串),可以使模式字符串向前推进若干个字符位置,而不只是一个字符,避免了重复比较,同时也实现了文本字符串指针的无回溯。要点是:我们能够通过预先对模式的分析获得知识,即如果在模式的位置l或2匹配失败则移动1个位置,如果在模式的位置3匹配失败则移动2个位置,如果在模式的位置4匹配失败则移动3个位置,以此类推。 算法描述[9]: 当模式匹配执行到比较字符Ti和Pi,其中l=i=n,l=j=m。 (1)若Ti=Pj则继续往右作匹配检测,即对Ti+1和Pj+l;进行匹配检测。 (2)若Ti≠Pj时则分两种情况进行讨论: 第一种情况:若j=l,则对Ti+l和Pi进行匹配检测,即把模式和正文向右移动一位再从模式的第一个字符进行匹配。 第二种情况:若lj=m,我们将试图在模式中找到一个合适位置再进行比较,我们把这个下标记做next[j]。执行Ti和next[j]的匹配,其中next[j]的构造是算法的核心,约定如下: Next[j]=-1,当j=0时 Next[j]=max{k|0kj且“P0 P1…Pk-1”=“Pj-k Pj-k+1…Pj-1”}此集合不为空集 Next[j]=0,其他情况 由于本文主讲的是KMP算法,估计我们举例详细说明,如主串为ababcabcacbab,模式串为abcac,匹配过程如下图2-1: 图2-1 一般情况下,假设主串为s0s1…sn-1,模式串为p0p1…pm-1,从上例的分析可知,为了实现改进算法,需要解决下述问题:当匹配过程中产生“失配”(即si≠pj)时,模式串“向右滑动”可行的距离有多远,换句话说,当主串中字符Si与模式中字符Pj “失配”(即比较不等)时,主串中字符Si(i指针不回溯)应与模式中哪个字符再比较? 假设此时主串中字符Si应与模式中字符Pk(k<j)继续比较,则模式中字符Pk前面k个字符的子串必须满足下列关系式(f-1),且不存在k>k满足下列关系式p0p1…pk-1 = si-ksi-k+1…si-1 (f-1) 图2-2 图2-2模式串与主串的对应关系一 当主串中字符Si与模式中字符Pj “失配”时,已经得到的“部分”匹配结果是: pj-kpj-k+1…pj-1=si-ksi-k+1…s

文档评论(0)

shenlan118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档