字符串匹配算法简要总结.docVIP

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

在网络安全的研究中,字符串匹配是一种使用很普遍的技术,例如杀毒软件和IDS中的特征码匹配,都需要用到字符串匹配。作为字符串匹配中的一种特殊情况,近似字符串匹配的研究也同样重要。这里将对字符串匹配算法进行简要分析和总结。 本文的主要参考了《柔性字符串匹配》一书。下面对各种算法进行简要的总结。 一 精确字符串匹配 字符串的精确匹配算法中,最著名的有KMP算法和BM算法。下面分别对几种常用的算法进行描述。 1:KMP算法 KMP算法,即Knuth-Morris-Pratt算法,是一种典型的基于前缀的搜索的字符串匹配算法。Kmp算法的搜索思路应该算是比较简单的:模式和文件进行前缀匹配,一旦发现不匹配的现象,则通过一个精心构造的数组索引模式向前滑动的距离。这个算法相对于常规的逐个字符匹配的方法的优越之处在于,它可以通过数组索引,减少匹配的次数,从而提高运行效率。 详细算法介绍参考:KMP算法详解(matrix67原创) 2:Horspool算法 和KMP算法相反,Horspool算法采用的是后缀搜索方法。Horspool算法可以说是BM算法的意见简化版本。在进行后缀匹配的时候,若发现不匹配字符,则需要将模式向右移动。假设文本中对齐模式最后一个字符的元素是字符C,则Horspool算法根据C的不同情况来确定移动的距离。实际上,Horspool算法也就是通过最大安全移动距离来减少匹配的次数,从而提高运行效率的。 算法参考:《算法设计与分析基础》 第二版 清华大学出版社 3:BM算法 BM算法采用的是后缀搜索(Boyer-Moore算法)。BM算法预先计算出三个函数值d1、d2、d3,它们分别对应三种不同的情形。当进行后缀匹配的时候,如果模式最右边的字符和文本中相应的字符比较失败,则算法和Horspool的操作完全一致。当遇到不匹配的字符并非模式最后字符时,则算法有所不同。 算法参考:《算法设计与分析基础》 第二版 清华大学出版社 4:Shift-And算法 这种算法比KMP简单,不过它的特点在于运用了位并行技术,提高程序运行效率。Shift-And算法首先构造一个表,记录字母表中每个字符的位掩码。然后每读取一个文本字符的时候,通过计算公式的运算,获取新的位向量。 二 近似字符串匹配 近似字符串匹配主要有四种方法。第一种是动态规划方法,这是最古老,同时也是最灵活的近似匹配算法。第二种是基于自动机公式模拟文本搜索。第三种方式采用位并行方法来模拟其他方法,号称是“最成功”的一种方法。最后则是通过简单的过滤文本中不相关文本时间快速搜索。 1:动态规划算法 动态规划算法是基于“编辑距离”的概念实现近似字符串匹配。通俗地说,编辑距离表示将一个字符串变换成另一个字符串所需要进行的最少的编辑次数。这里的编辑操作包括添加、删除、替换。通过计算编辑距离矩阵,可以得出最佳匹配。 编辑矩阵的初始化和计算是动态规划算法的关键。初始化数值直接决定是全局匹配还是局部匹配,而在计算公式中所采用的增量,则表示了各种操作的权值。 上面公式中,这三种编辑操作的权值都为1,但是实际上可以修改权值以限制各种编辑操作出现的频率。例如,在PI项目中,就采用了不同的权值进行计算。详细描述参考”Network Protocol Analysis using Bioinformatics Algorithms”。 算法描述中提到,为了减少空间复杂度,没有必要保存整个编辑矩阵。但是,貌似如果不保存整个编辑矩阵的话,就很难通过回溯的方法找到最优匹配。 2:基于自动机的算法 关于基于自动机的方法,相关资料比较少,而中文资料则更少。在《柔性字符串匹配》一书中稍微提到的这种方法,但是并没有深入讲解其中的原理和实现步骤。 上面这个状态转换图让人感觉莫名其妙,不知道这个自动机是如何转换的。实际上,这是通过公式计算出来的。 详细介绍请参考:Faster Approximate String Matching 3:位并行算法 实际上,与其说位并行算法是一种近似搜索方法,倒不如说它是一种加速实现的手段。位并行算法是用来模拟经典算法的。在搜索中,通过并行模拟,可以加快经典算法的运行速度。位并行算法非常适合模式串比较短的情况。 位并行实际上利用了计算机的并行性原理,将若干不同的值打包到一个长度为w的计算机字中,这样就可以利用一次操作或运算来实现原本需要若干次操作或运算才能完成的功能。 参考:《用位并行法进行过滤的中文近似串匹配算法》 4:文本快速过滤算法 过滤算法是基于这种思想:判断文中某个位置的字串和模式串不匹配,可能比判断而这相匹配更容易。所以过滤算法的

文档评论(0)

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

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

1亿VIP精品文档

相关文档