I字符串模式匹配算法综述.docVIP

  1. 1、本文档共14页,可阅读全部内容。
  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文档。上传文档
查看更多
I字符串模式匹配算法综述

字符串模式匹配算法综述 摘要:字符串匹配问题是在给定符号序列(称为文本)中按照一定的匹配条件,搜索给定符号序列或给定符号序列集合中元素(称为模式)出现位置的搜索问题。该问题是计算机科学的基础问题之一,被广泛的应用于各种涉及文字和符号处理的领域中,是网络安全、信息检索、计算生物学等重要领域的关键问题。本文主要介绍了BF 算法、KMP 算法、BM 算法、BMH 算法、AC 算法和 AC-BM 算法。 关键词:模式匹配,BF算法,KMP算法,改进算法,BM算法,AC算法,ACH算法。 0.前言 字符串是一种线性表,它在计算机应用系统中如文本编辑、情报检索、自然语言翻译有着广泛的应用。在这些应用中常常需要在一堆文字符串中检测是否有某一指定的字符串。设Pattern(下文简称 P)和Text(下文简称 T)是给定的两个字符串,在字符串T中寻找等于P的子串的过程称为模式匹配,其中字符串T称为主串,字符串P称为模式串。如果在字符串T中找到等于P的子串,则称匹配成功,否则匹配失败。比较著名的模式匹配算法有BF算法、KMP算法、AC算法和BM算法,本文对所述算法进行探讨。随着计算机技术的快速发展,计算机网络在国民经济中发挥了日益重要的作用,己成为人们日常生活中不可缺少的一部分。同时,网络安全也日益引起人们的关注。 1.模式匹配算法 1.1 单模式匹配算法 1.1.1 BF(Bruce Force)算法 算法思想 从文本字符串 T的第一个字符起和模式字符串 P 中的第一个字符开始比较,若相等,逐个比较后续字符,否则从文本字符串的下一个字符起再重新和模式字符串的第一个字符比较。 算法描述 对于文本字符串 模式字符串 (1)P 和 T 从左端对齐,使得 与 对齐; (2)从左到右匹配 P 与 T 的字符,直到出现不匹配的情况,则执行(3),或是 P 己被完全匹配的情况则结束比较; (3)将 P 右移一个字符,重新从P的第一个字符开始匹配; (4)重复上述(2)过程,直到 P 被完全匹配,或 P 移到 T 的右端。 1.1.2 KMP(Knuth Morris Pratt)算法 KMP 算法是 Knuth 等人在 BF 算法的基础上提出来的。从本质上讲,KMP算法就是出现不匹配情况下带有智能指针初始化的 BF 算法。为了在不匹配时重新定位指针,KMP 算法需要进行预处理算出一个 next数组来。 1.基本思想 KMP 算法利用己匹配成功部分的信息,即前缀(模式字符串中存在的相同子串),可以使模式字符串向前推进若干个字符位置,而不只是一个字符,避免了重复比较,同时也实现了文本字符串指针的无回溯。 算法描述 当模式匹配执行到比较字符 和,其中 l=i=n,l=j=m。 (l)若 =则继续往右做匹配检测,即对 和 进行匹配检测。 (2)若 当 j=l,则对 和 进行匹配检测,即把模式和正文向右移动一位再从模式的第一个字符进行匹配;若 lj=m,我们将试图在模式中找到一个合适位置再进行比较,我们把这个下标记做 next[j]。执行和的匹配,其中 next[j]的构造是算法的核心,约定如下: 1.1.3改进的字符串匹配算法 字符串模式匹配算法要解决的关键问题是:在模式与文本在某个位置比较失败时,如何使模式串窗口向右移动最佳距离,尽量多的跳过不必要比较的字符,减少匹配的次数,并使产生这种距离的算法复杂度降低和易于理解。通过对现有的各种字符串匹配算法进行分析研究,我们提出一种改进算法,该算法简单实用,便于理解。 1.基本思想 与KMP算法类似,在模式串的匹配过程中,字符比较采用符合人们习惯的从左到右顺序,模式窗口也是从左到右移动。 2.算法描述 设当前的比较窗口是,在某次比较过程中失败于处,即前 j个字符匹配成功:=,而 ≠。首先定义一个函数 S来确定正文中出现的字符 x 在模式P 中的位置,考虑到要使用模式对应窗口后的第一个字符,在模式串 P 中补充一个字符 Pm与之对应,以使和文本中的窗口对齐,这样 ,如图 1所示。 图 1 模式串P与主串T对应位置 函数 S 的定义如下: 其中:x取当前窗口匹配失败位置j及其后的字符即x=,j≤k≤m,并且x取值位置的变化引起前面子串{}长度的变化。S(x)函数实质是用来求匹配失败时模式串的向右移动距离。有以下三种情况: 当 x 不在前面的子串 (子串包括 P本身) 中时,启发移动的距离是子串的字符个数; 在子串中从后向前查找第一个与x相同的字符,启发移动的距离是它们之间的间隔距离; 如果 ,子串的下标0-1=-1,为统一使用函数S(x)而规定的取值。 图2 改进算法的具体实现流程 我们采用 3个位置的字符:、、进行计算,之所以考虑用、来参与决定模式窗口的移动距离,是因为如前面的字符发生不匹配,

文档评论(0)

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

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

1亿VIP精品文档

相关文档